【发布时间】:2018-12-16 01:00:17
【问题描述】:
从Magnet Pattern article,我发现隐式转换特殊模式。
有趣的是,这种方法也适用于具有多个参数以及不同返回类型的“重载”。如果您使用多个参数调用 complete ,编译器会查找可以从包装所有参数的元组中生成磁铁实例的隐式转换。这样可以支持多达 22 个参数的重载(scala 中元组的最大数量)。
scala> def printInt(i: Int) = println(i)
printInt: (i: Int)Unit
scala> printInt(10)
10
scala> printInt(10, 20)
^
error: too many arguments (2) for method printInt: (i: Int)Unit
scala> implicit def toOneInt(is: (Int, Int)): Int = is._1 + is._2
warning: there was one feature warning; for details, enable `:setting -feature' or `:replay -feature'
toOneInt: (is: (Int, Int))Int
scala> printInt((10, 20))
30
scala> printInt(10, 20)
30
printInt((10, 20)) 让我很无聊,但printInt(10, 20) 太棒了!
然后我从Scala Language Specification (2.12) 寻找这个特殊模式的规范。 但是我还是找不到,最后放弃了。
谁能告诉我Scala Language Specification (2.12) 的特殊模式在哪里?
【问题讨论】: