进到 Scala 的 REPL (Read-Eval-Print-Loop) 有两种方式,scala 或 sbt console。函数式的任务就是求值(reduction steps),Scala 把表达式和方法进行了统一,Scala 的变量和函数也应作一致性思考。Substitution Model, no side effects, λ-calculus -> immutable。 Call-by-name vs call-by-value ,是调用者还是被调用者来对参数求值的问题。val 定义值时,会做 call-by-value 操作,def 则会做 call-by-name 操作,或者可以说是静态与动态求值。
要指定函数参数 y 以 Call-By-Name 传递,要这么定义 def test(x: Int, y: => Int) = x * x
,这样就避免了 test(3, 2*4) 调用时 2*4
被求值,这里把 y 转换成了函数参数 y: => Int
。
本视频讲义:Elements of Programming
参考:scala中的call-by-name和call-by-value
本文链接 https://yanbin.blog/scala-functional-programming-elements/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。