【问题标题】:Changing function's parameter value inside its body [duplicate]在其主体内更改函数的参数值[重复]
【发布时间】:2016-06-28 06:18:46
【问题描述】:

为什么我仍然允许这样做?

  @spec url_hash(String.t) :: String.t
  def url_hash(url) do
    url = String.replace(url, ~r/\s/, "")
    Base.encode16(:crypto.hash(:md5, url), case: :lower)
  end

而不是,我认为合适的函数式编程范式?

  @spec url_hash2(String.t) :: String.t
  def url_hash2(url) do
    url_copy = String.replace(url, ~r/\s/, "")
    Base.encode16(:crypto.hash(:md5, url_copy), case: :lower)
  end

如您所见,我正在修改函数体内的参数值。

【问题讨论】:

  • @GavinBrelstaff 所以悬空指针几乎是常态?
  • 从函数返回后,您是否费心检查URL?
  • @OnorioCatenacci 我在阅读了链接的答案后得到了它,范围的东西

标签: functional-programming elixir


【解决方案1】:

纯函数式语言不允许您这样做,甚至一些不纯函数式语言(如 Erlang)也不允许这样做。 Erlang 中的约定是具有与此等效的代码:

def url_hash(url) do
  url1 = some_func(url)
  url2 = some_other_func(url1)
  url3 = yet_another_func(url2)
  url3
end

问题在于,重新排序或添加新代码行会非常痛苦。出于这个原因,Jose 决定允许变量重新分配。但是,原始的 url 字符串未修改 - 您只是更改了 url 指向的字符串。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2021-03-22
  • 2021-08-15
  • 2013-05-11
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多