我在映射带有可选参数的函数时遇到问题。如果参数不是可选的,我会得到相同的类型错误。这是一个简单的说明:

scala> def multiple(m: Int, n: Int = 2) = m * n 
multiple: (m: Int,n: Int)Int 
 
scala> multiple(5) 
res0: Int = 10 
 
scala> multiple(5, 7) 
res1: Int = 35 
 
scala> (1 to 10).map(multiple) 
<console>:7: error: type mismatch; 
 found   : (Int, Int) => Int 
 required: (Int) => ? 
       (1 to 10).map(multiple) 

这是使其工作的一种方法,但它需要重复默认参数,这是维护噩梦:
scala> (1 to 5).map { n => multiple(n, 2) }  
res6: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10) 

有没有更好的方法来做到这一点?更一般地说,为什么带有可选参数的函数看起来与如果参数不是可选的具有相同的类型? multiple的实际类型是什么? ?

请您参考如下方法:

这似乎有效:

(1 to 10).map(multiple(_))  
 
//res0: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20) 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!