在Magnet Pattern article中,我发现了隐式转换特殊模式。
有趣的是,这种方法还适用于具有多个参数以及不同返回类型的“重载”。如果调用带有几个参数的complete,编译器将寻找一个隐式转换,该转换可以从包装所有参数的元组中生成一个磁石实例。这样可以支持多达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 Language Specification (2.12)寻求了此特殊模式的规范。 但是我还找不到它,最终放弃了。
谁能告诉我Scala Language Specification (2.12)的特殊图案在哪里?
答案 0 :(得分:0)
通过xuwei_k help,最终我达到了功能“自适应参数”或“自动纠缠”的名称。 有关更多详细信息,Scala Puzzle(jp)非常有用。
Scala Puzzlers也会显示[SI-3583] Spec doesn't mention automatic tupling - Scala。
然后,答案还没有。