gpt4 book ai didi

string - 避免 Scala 中的隐式定义歧义

转载 作者:行者123 更新时间:2023-12-03 20:35:24 25 4
gpt4 key购买 nike

我正在尝试创建从任何类型(例如 Int)到字符串的隐式转换...

隐式转换为 String 意味着 RichString 方法(如 reverse)不可用。

implicit def intToString(i: Int) = String.valueOf(i)
100.toCharArray // => Array[Char] = Array(1, 0, 0)
100.reverse // => error: value reverse is not a member of Int
100.length // => 3

到 RichString 的隐式转换意味着 String 方法(如 toCharArray)不可用
implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.reverse // => "001"
100.toCharArray // => error: value toCharArray is not a member of Int
100.length // => 3

使用这两种隐式转换意味着重复的方法(如长度)是不明确的。
implicit def intToString(i: Int) = String.valueOf(i)
implicit def intToRichString(i: Int) = new RichString(String.valueOf(i))
100.toCharArray // => Array[Char] = Array(1, 0, 0)
100.reverse // => "001"
100.length // => both method intToString in object $iw of type
// (Int)java.lang.String and method intToRichString in object
// $iw of type (Int)scala.runtime.RichString are possible
// conversion functions from Int to ?{val length: ?}

那么,是否可以隐式转换为 String 并仍然支持所有 String 和 RichString 方法?

最佳答案

我没有解决方案,但会评论原因 RichString方法在您的 intToString 之后不可用隐式是 Scala 不链接隐式调用(参见 Scala 编程中的 21.2“隐式规则”)。

如果你介绍一个中级String , Scala 会将隐式转换为 RichString (隐式定义在 Predef.scala 中)。

例如。,

$ scala
Welcome to Scala version 2.7.5.final [...].
Type in expressions to have them evaluated.
Type :help for more information.

scala> implicit def intToString(i: Int) = String.valueOf(i)
intToString: (Int)java.lang.String

scala> val i = 100
i: Int = 100

scala> val s: String = i
s: String = 100

scala> s.reverse
res1: scala.runtime.RichString = 001

关于string - 避免 Scala 中的隐式定义歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com