有人可以用一些很好的例子清楚地解释它吗?在解释函数式编程时,我在 Scala 中遇到了这句话。
“一流”并不是一个正式定义的概念,但它通常意味着一个实体具有三个属性:
有可能used,不受限制,只要“普通”值可以(即从函数传递和返回)放入容器等。
有可能建,不受限制,只要“普通”值可以,即本地、表达式中等。
有可能typed以类似于“普通”值的方式,即为这样的实体分配一个类型,并且它可以与其他类型自由组合。
对于函数,(2) 特别意味着局部函数可以使用作用域内的所有名称,即有词法闭包。它还通常带有用于构造的匿名形式(例如匿名函数),但这并不是严格要求的(例如,如果该语言具有足够通用的let表达式)。第 (3) 点在非类型化语言中同样成立。
所以你明白为什么 Scala(以及函数式语言)中的函数被称为一流的。以下是一些其他示例。
C/C++ 中的函数有not一流的。虽然 (1) 和 (3) 可以通过函数指针使用,但 (2) 不支持函数本身。 (这一点经常被忽视。)
同样,数组和结构体在 C 领域也不是一流的。
Scala 中的类不是一流的。您可以定义和嵌套它们,但不能例如将它们传递给函数(仅其实例)。有些面向对象语言具有一流的类,事实上,为 Scala 设计提供信息的所谓 nuObj 演算也允许这样做。
一流的模块是类似 ML 的语言中经常需要的功能。它们很困难,因为它们会导致不可判定的类型检查。某些 ML 方言允许将模块包装为一流值,但可以说,这并不会使模块本身成为一流。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)