【发布时间】:2022-01-13 15:15:20
【问题描述】:
我很难理解为什么 scala 会让我愉快地写一些字段验证:
field -> text().verifying("declaration.additionalDocument.documentTypeCode.unacceptableCode", f => isEmpty(f) or !documentCodesNotAcceptable.contains(f))
但当我这样做时不会:
text().verifying("declaration.additionalDocument.documentTypeCode.unacceptableCode", isEmpty or !documentCodesNotAcceptable.contains(_))
在第二种情况下,我收到一个编译错误,告诉我type mismatch; found : String => Boolean required: Boolean
但是为什么呢?第二种方式和第一种方式有什么不同?
【问题讨论】:
-
因为第二个扩展为
isEmpty.or(x => !documentCodesNotAcceptable.contains(x))这就是为什么_语法在我的黑名单中, -
@LuisMiguelMejíaSuárez 我明白了。所以我假设
x => !documentCodesNotAcceptable.contains(x)没有解析为布尔值,因为x没有价值? -
不,比这更简单。
or期望Boolean而不是Function无论如何Function returns. -
@LuisMiguelMejíaSuárez 啊,我现在明白了。此外,我能否要求澄清一下您为什么不喜欢
_语法 - 您总是更喜欢匿名函数吗? -
我不喜欢这种问题,人们对此感到困惑,或者他们有工作代码并进行了一些小改动,然后它会因奇怪的类型错误而失败。所以我通常更喜欢 lambda,但当 lambda 太小时,我会使用
_,例如foos.map(_.bar)或foo.reduce(_ + _)