我已经定义了两个部分函数(哈希),我希望它们带有一个可选的第二个布尔参数:
def SHA1 = hash(MessageDigest.getInstance("SHA-1"))_
def MD5 = hash(MessageDigest.getInstance("MD5"))_
private def hash(algorithm:HashAlgorithm)(s:String, urlencode:Boolean = false) = {
val form = if (urlencode) "%%%02X" else "%02X"
(algorithm.digest(s.getBytes) map(form format _)).mkString
}
当我使用两个参数调用函数时,它会编译,但只有一个参数会出现编译错误:
// First 3 tests are fine
val test1 = hash(MessageDigest.getInstance("SHA-1"))("foo", true)
val test2 = hash(MessageDigest.getInstance("SHA-1"))("foo")
val test3 = SHA1("foo", true)
// not enough arguments for method apply: (v1: String, v2: Boolean)String in trait Function2. Unspecified value parameter v2.
val test4 = SHA1("foo")
我只是将其重构为使用部分函数,在重构之前我可以强制哈希函数使用默认值而没有任何问题。
为什么部分函数实现无法允许默认参数的任何想法?我使用部分函数和柯里化在一起做错了吗?