1
我知道这个问题似乎有点异端。事实上,我非常喜欢C++ 11中的lambda表达式,所以我非常激动地学习一种从一开始就支持它们的语言,而不是一个人为的添加。Scala是否像C++ lambda一样灵活?
但是,我无法弄清楚如何用Scala处理C++ 11 lambda表达式。
假设我想创建一个函数,该函数将作为参数传入的数字加上变量a
中包含的某个值。在C++中,我既可以做
int a = 5;
auto lambdaVal = [ a](int par) { return par + a; };
auto lambdaRef = [&a](int par) { return par + a; };
现在,如果我改变a
,第二个版本会改变自己的行为;但第一个将继续添加5
。
在Scala中,如果我这样做
var a = 5
val lambdaOnly = (par:Int) => par + a
我基本上得到了lambdaRef
模式:改变a
会立即改变功能做什么。 (这似乎有点似是而非到我了,这一次a
并不在lambda的声明甚至提到,只有在它的代码。但希望这是)
我失去了获得lambdaVal
的方式吗?或者我必须先将a
复制到val
以便随意修改它,而没有副作用?
好吧,如果我能在一行写'{VAL aNow =一个; (par:Int)=> par + aNow}'......它不比C++等效的时间长! –
一般来说,无论如何避免使用'var's并优先选择'val'是最好的选择。 –
我想这就是我所缺少的:)在我眼前的大多数值都是可变的,我必须改变它! –