我有以下代码:
type RString = String implicit def stringToRString(s:String):RString = s.reverse val s = "The Force Awakens" val r:RString = s println(r)
我有点期待r
与之相反,s
但它等于s
.这是scala编译器采用快捷方式作为RString
别名,String
因此永远不会调用隐式转换吗?
类型别名不会引入新类型,它是别名.您可以更换左侧和右侧.因此r: RString
是相同的r: String
,因此不需要转换.
你需要这样的东西:
object RString { // allow RString to be used as a String implicit def toString(r: RString): String = r.toString } implicit class RString(val peer: String) extends AnyVal { override def toString = peer.reverse } val s = "The Force Awakens" val r: RString = s // "snekawA ecroF ehT"
也就是说,RString
是一个新类型,一个反转字符串的值类.