【发布时间】:2020-09-12 03:57:59
【问题描述】:
方法类型没有价值。我们如何评估一种方法?
以SML为例,我有
fun myFunc(x) = x + 5
val b = myFunc(2)
在第二个表达式中,myFun 有一个类型和一个值,我们使用它的类型进行类型检查,并使用它的值和它的参数来评估 b 的值
但是在没有值的 Scala 方法中,我们如何评估?我对 Scala 很陌生,所以可能不太清楚。
def myFunc(x) = x + 5
val b = myFunc(2)
从val b = myFunc(2) 到val b = 2 + 5,中间发生了什么?我们从哪里或从什么对象知道myFunc(x) 是x + 5?
谢谢!!
【问题讨论】:
-
您想了解方法调用在 JVM 上的工作原理吗?
-
你能给我指点这方面的资源吗?如果一个方法不是一个值,它必须是某种东西,比如一块内存,它是什么,为什么它不能是一个值,因为它是一块内存?
-
当我们在它上面创建一个函数值时,就像一个带有 apply() 方法的类,apply 方法指向原始方法,所以在我的理解中它必须是内存中的东西。
-
函数本身必须是值,而不是一些神秘的定义,这对于受过命令式范式教育的传统程序员来说,过去是一个难以理解的新想法。对你来说,情况正好相反。所以我猜你的第一语言是一种功能语言,比如 SML 或 LISP。好的。认为它仅在具有动态范围的语言中很简单。对于词法,您必须具有环境和闭包,才能将函数(方法)本身作为值,所以它不是那么简单。至于 Scala,我不知道 Scala。 :)
标签: scala functional-programming substitution evaluation