【问题标题】:Erlang: Why does this fail with a 'badarith' exception?Erlang:为什么这会因“badarith”异常而失败?
【发布时间】:2010-11-29 19:12:19
【问题描述】:

是否可以在 Erlang 中实现闭包?

例如,我如何从 Scheme 中翻译这个 sn-p?

(define (make-adder n)
  (lamdba (x) (+ x n)))

我尝试了以下方法,但我显然遗漏了一些东西。

make_adder(n) ->
    fun (x) -> x + n end.

编译会报错

Warning: this expression will fail with a 'badarith' exception

【问题讨论】:

  • 伙计们,为什么这会被赞成?我的问题是多么蹩脚,我很尴尬!

标签: erlang closures


【解决方案1】:

你不能添加原子。 erlang 中的变量以大写字母开头。以小写字母开头的单词是原子。

换句话说,您的问题与funs 完全无关,您只需要将变量名大写即可。

【讨论】:

  • 谢谢!我正在删除问题并去睡觉!
  • 无法删除问题...刚去睡觉。
  • 留下问题并将标题更改为“为什么我会得到“这个表达式会因 'badarith' 异常而失败”?或类似的规定。这样所有其他会犯这个错误的 erlang 初学者(我知道我犯了)在搜索消息时都会很容易找到它。
  • 我确认一位初学者确实在阅读本文时得到了帮助。谢谢:-)
【解决方案2】:
make_adder(N) ->
  fun (X) -> X + N end.

【讨论】:

    【解决方案3】:

    erlang 中的变量以 大写字母 开头。 以小写字母开头的单词是原子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      相关资源
      最近更新 更多