从Magnet Pattern的文章中,我发现了隐式转换的特殊模式。
有趣的是,这种方法也适用于具有多个参数以及不同返回类型的"重载"。如果调用带有多个参数的complete,编译器会寻找一个隐式转换,该转换可以从包装所有参数的元组中生成一个magnet实例。这种方式可以支持多达22个参数的重载(scala中元组的最大arity(。
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语言规范(2.12(中找到了这个特殊模式的规范。然而,我还找不到它,最终放弃了。
有人能告诉我Scala语言规范(2.12(中的特殊模式在哪里吗?
在xuwei_k的帮助下,我终于找到了功能的名称"adapted args"或"auto-tupling"。关于更多细节,Scala Puzzle(jp(非常有用。
Scala Puzzlers还展示了[SI-3583]Spec并没有提到自动元组-Scala。
那么,答案还没有找到。