为什么这个字段验证是类型不匹配?
Why is this field validation a type mismatch?
我无法理解为什么 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
但是为什么呢?第二种方式与第一种方式有何不同?
verifying
的第二个参数似乎是一个谓词。也就是说,一个函数取值 returns true
或 false
,这是验证框架的共同特征。
在第一个例子中谓词是
f => isEmpty(f) or !documentCodesNotAcceptable.contains(f)
解析为
f => (isEmpty(f) or !documentCodesNotAcceptable.contains(f))
这是一个完全合理的谓词,首先用 isEmpty
测试 f
,如果失败,则进行第二次测试。
在第二个例子中,谓词是这样的:
isEmpty or !documentCodesNotAcceptable.contains(_)
其中(如评论中所述)扩展为
(x => isEmpty(x)) or (x => !documentCodesNotAcceptable.contains(x))
所以这个表达式试图 or
两个函数在一起,这是不支持的。
解决方案是使用第一个版本:)
我无法理解为什么 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
但是为什么呢?第二种方式与第一种方式有何不同?
verifying
的第二个参数似乎是一个谓词。也就是说,一个函数取值 returns true
或 false
,这是验证框架的共同特征。
在第一个例子中谓词是
f => isEmpty(f) or !documentCodesNotAcceptable.contains(f)
解析为
f => (isEmpty(f) or !documentCodesNotAcceptable.contains(f))
这是一个完全合理的谓词,首先用 isEmpty
测试 f
,如果失败,则进行第二次测试。
在第二个例子中,谓词是这样的:
isEmpty or !documentCodesNotAcceptable.contains(_)
其中(如评论中所述)扩展为
(x => isEmpty(x)) or (x => !documentCodesNotAcceptable.contains(x))
所以这个表达式试图 or
两个函数在一起,这是不支持的。
解决方案是使用第一个版本:)