我正在为有趣的编程语言建模,并且语法在很大程度上受Scala的影响-特别是函数定义。
我遇到了一个设计问题,因为我的语言无法区分通过def
语法定义的函数(类方法)和分配给值的匿名函数(使用创建的值=>
)-它消除了实现和行为上的差异。
结果是以下两个定义含义相同:
def square(x: Int) = x*x
val square = (x: Int) => x*x
没有任何理由在任何正常情况下都使用后一种形式(立即匿名函数赋值)- 可以使用它代替def
形式。
具有用于定义命名函数的重复语法是否会损害语言或其他设计方面的正交性?
我更喜欢这种解决方案,因为它允许对方法和命名函数进行简短直观的定义(通过def
),以及对匿名函数进行简短定义(使用=>
)。
编辑:Scala 确实区分了两者 -匿名函数与def
Scala中定义的方法不同。不过,差异相对较细微-请参阅我之前链接的帖子。
val
符号定义递归函数吗?
fun
来定义递归函数。
def
而是这样。这只是以下事实的副作用:匿名函数(例如,(x : Int) => x + 1
是一个对象),并且可以使用将该对象分配给值val f = ...
。语言设计人员必须竭尽全力禁止语法。这与显式地支持两种(近似)做同一件事的语法不同。
However, assigning existing functions
似乎缺少句子的结尾