在Scala,我想做:
class Identifier(val str: String) {
override def toString(): String = str
}
class Variable(t: Type, name: Identifier, mutable: Boolean) {
override def toString(): String = name
}
但我不能,因为Scala不会将name
定义中的Variable#toString()
隐式转换为String。有没有办法实现这一目标?
要明确:我不想定义一个额外的方法,如:
object Identifier {
implicit def idToString(x: Identifier): String = x.str
}
我希望调用toString()
方法进行转换。
答案 0 :(得分:6)
尝试在toString()
toString方法中调用名称之后进行明确的Variables
调用,如下所示:
override def toString() = name.toString()
在这里,您将显式调用将Variable
转换为字符串的方法,从而告诉编译器您想要的内容。
..除非你真的要求方法隐含......
答案 1 :(得分:1)
如果您只是想要'奇怪'的方法,那么您可以使用成员导入
class Variable(t: Type, name: Identifier, mutable: Boolean) {
import name.{toString => toStr}
override def toString(): String = toStr
}
你不能import name.toString
因为toString
等所有其他Any
方法隐藏了这些
答案 2 :(得分:0)
override def toString(): String = name.toString
对手指的负担不是很严重