Scala:通过方法隐式转换(例如toString)

时间:2012-03-04 11:03:40

标签: scala view implicit

在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()方法进行转换。

3 个答案:

答案 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

对手指的负担不是很严重