根據這些定義:結構類型轉換不適用於字符串?
type HasMkString = { def mkString(sep:String):String }
val name = "John"
val names = List("Peter", "Gabriel")
而鑑於這些事實:
name.mkString("-") // => "J-o-h-n"
name.isInstanceOf[HasMkString] // => true
names.isInstanceOf[HasMkString] // => true
雖然這個工程:
names.asInstanceOf[HasMkString].mkString("-")
// => Peter-Gabriel
這不起作用:
name.asInstanceOf[HasMkString].mkString("-")
java.lang.NoSuchMethodException: java.lang.String.mkString(java.lang.String)
at java.lang.Class.getMethod(Class.java:1624)
at .reflMethod$Method1(<console>:10)
at .<init>(<console>:10)
at .<clinit>(<console>:10)
at .<init>(<console>:7)
at .<clinit>(<console>)
at $print(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
這是爲什麼? 是因爲String是一個Java類嗎? 我可以解決這個問題嗎? 這是Scala實現中的缺陷/缺點嗎?
謝謝!這解釋了它。通常我不會做這樣的事情。我只是試圖翻譯一段Ruby代碼,然後再細化爲更習慣的Scala。 –