【问题标题】:Scala implicit conversion: converting Int to List does not print list on printing the integer variableScala隐式转换:将Int转换为List不会在打印整数变量时打印列表
【发布时间】:2017-07-12 05:18:07
【问题描述】:

我正在试验 scala 的隐式转换功能。

我尝试编写一个从 Int 隐式转换为三个相同整数的 List 的方法

虽然列表方法是适用的,但是当我们打印该值时,它仍然显示为整数

scala> implicit def conversion(x:Int) = List(x,x,x)
conversion: (x: Int)List[Int]

scala> 1
res31: Int = 1

scala> res31.length
res32: Int = 3

scala> res31.tail
res33: List[Int] = List(1, 1)

scala> println(res31)
1

任何想法为什么它会表现出这种行为?理想情况下,它应该打印如下:

List(1, 1, 1)

【问题讨论】:

    标签: scala implicit-conversion


    【解决方案1】:

    只有在无法应用原始值时才会启动隐式转换,例如没有这种参数的方法。因为您可以打印 Int ,所以 scala “不需要”应用转换。你可以强制它: println(res31:List[Int])

    【讨论】:

      【解决方案2】:

      查看文档:http://docs.scala-lang.org/tutorials/tour/implicit-conversions.html

      隐式转换适用于两种情况:

      如果表达式 e 的类型为 S,并且 S 不符合表达式的预期类型 T。 在 S 类型的 e 的选择 e.m 中,如果选择器 m 不表示 S 的成员。

      所以对于你的例子,除了res31.tail之外没有出现type conversion,在res31.tail需要调用List类型tail方法,这个动作触发implicit转换。其他操作不会触发隐式转换

      【讨论】:

        【解决方案3】:

        println 需要Any 类型的参数,因此不需要隐式转换。在前两种情况下,Int 没有名为 lengthtail 的方法,但 List 有它们,这就是在这些表达式中进行转换的原因。

        【讨论】:

          【解决方案4】:

          要打印为您可以使用的列表, println(res53.toList)

          【讨论】:

            猜你喜欢
            • 2012-10-23
            • 2018-03-08
            • 2013-01-01
            • 2019-05-13
            • 2021-11-21
            • 2016-06-26
            • 2016-05-13
            • 1970-01-01
            • 2014-06-20
            相关资源
            最近更新 更多