首页 > 解决方案 > 我在 Scala 规范中找不到带有方法参数的隐式转换特殊模式

问题描述

磁铁模式文章中,我发现了隐式转换特殊模式。

有趣的是,这种方法也适用于具有多个参数以及不同返回类型的“重载”。如果您使用多个参数调用 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 语言规范 (2.12)的特殊模式在哪里?

标签: scalaimplicit

解决方案


通过xuwei_k 帮助,我终于找到了“自适应参数”或“自动元组”功能的名称。有关更多详细信息,Scala Puzzle(jp)非常有用。

Scala Puzzlers还显示[SI-3583] Spec 没有提到自动元组 - Scala

那么,答案还无处可寻。


推荐阅读