如何简化scala的函数文字?
我是scala的新手,并试图编写一个函数文字来检查给定的整数是否为奇数。
我的第一次尝试是:
val isOdd = (x:Int) => (x & 1) == 1
它工作得很好,而且,由于参数x只在这个函数文字中出现一次,我很想用“_”表示法进一步简化它,如下所示:
val isOdd = ((_:Int) & 1 ) == 1
但这次编译器抱怨:
警告:使用`=='比较新对象将始终产生错误
val isOdd =((_:Int)&1)== 1
这个警告意味着什么?为什么编译器将((_ :Int) & 1)
识别为新对象而不是导致值的按位运算?有没有办法用“_”表示法编写这个函数文字?
没有找到相关结果
已邀请:
5 个回复
伞腹
你希望等号右边的所有东西都是lambda,而且
你只希望括号内的东西是lambda Scala已经决定,当你使用下划线创建一个lambda时,它会选择最里面的一组括号作为lambda的边界。有一个例外:
不算作最里面的括号,因为它的目的只是用
占位符对它们进行类型声明分组。 因此:
最后一种情况可以让你做的事情
并将其翻译成
体悉
:-)
淘圃跺枯替
枫湃揩乾纲
并创建一个类型为
的对象,即一个函数。 然后应用比较运算符
将此函数与值1进行比较 函数不等于值1.因此结果为
,因此您的代码相当于:
你可以做的是创建另一个匿名函数,它可以完成计算的“17”部分。这很难看:
这相当于更详细(也许更容易理解):
勺的驴吓识