How is ScalaRunTime.stringOf(x) not failing when x.toString fails?
read-eval-print-loop, scala
Solution
You didn't post the stack trace, which is a compiler crash and not a failed assertion by joda.
The REPL is crashing compiling the expression.
It looks like `AbstractDateTime` has an overloaded `toString` method, and overload resolution crashes on the `@ToString` annotation on the usual `toString()`. (The symbol for `ToString` is missing.)
But `stringOf(x: Any)` is just invoking `Object.toString()`, of course.
There are some known issues, apparently. A recent issue was fixed.
On 2.10.4:
scala> (dt: Any).toString
res0: String = 2014-05-14T11:56:21.794-07:00
scala> dt.toString
<console>:9: error: ambiguous reference to overloaded definition,
both method toString in class AbstractDateTime of type (x$1: String, x$2: java.util.Locale)String
and method toString in class AbstractDateTime of type (x$1: String)String
match expected type ?
dt.toString
^
scala> dt.toString() // crashes
2.10.3 is bumpier and claims `error while loading DateTime, class file is broken`.
The crash is on 2.11.0.
Problem
Whilst trying to figure out some `joda-time` `DateTime` (timestamp formatting) issues I opened a REPL with ``` scala -cp joda-time-2.3.jar ``` and forgot to add the `joda-convert` jar, and eventually got a ``` java.lang.AssertionError: assertion failed: org.joda.convert.ToString ``` (The entire stacktrace) I was able to simplify this to: ``` > scala -cp joda-time-2.3.jar Welcome to Scala version 2.11.0 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_05). Type in expressions to have them evaluated. Type :help for more information. scala> val dt = new org.joda.time.DateTime warning: Class org.joda.convert.FromString not found - continuing with a stub. warning: Class org.joda.convert.ToString not found - continuing with a stub. warning: Class org.joda.convert.FromString not found - continuing with a stub. warning: Class org.joda.convert.ToString not found - continuing with a stub. dt: org.joda.time.DateTime = 2014-05-14T17:54:24.511+01:00 scala> scala.runtime.ScalaRunTime.stringOf(dt) res0: String = 2014-05-14T17:54:24.511+01:00 scala> dt.toString java.lang.AssertionError: assertion failed: org.joda.convert.ToString ``` How is `ScalaRunTime.stringOf(dt)` succeeding where `dt.toString` fails?