【问题标题】:How is ScalaRunTime.stringOf(x) not failing when x.toString fails?当 x.toString 失败时,ScalaRunTime.stringOf(x) 如何不失败?
【发布时间】:2014-05-14 17:10:01
【问题描述】:

在试图找出一些 joda-time DateTime(时间戳格式)问题时,我打开了一个 REPL

scala -cp joda-time-2.3.jar

忘记添加joda-convert jar,最终得到了一个

java.lang.AssertionError: assertion failed: org.joda.convert.ToString

(The entire stacktrace)

我能够将其简化为:

> 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

ScalaRunTime.stringOf(dt) 如何在 dt.toString 失败的情况下成功?

【问题讨论】:

标签: scala read-eval-print-loop


【解决方案1】:

您没有发布堆栈跟踪,这是编译器崩溃而不是 joda 的失败断言。

REPL 在编译表达式时崩溃。

看起来AbstractDateTime 有一个重载的toString 方法,并且重载解析在通常的toString() 上的@ToString 注释上崩溃。 (ToString 的符号不见了。)

当然,stringOf(x: Any) 只是在调用 Object.toString()

显然有some known issuesrecent issue 已修复。

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 比较坎坷,声称error while loading DateTime, class file is broken

崩溃发生在 2.11.0。

【讨论】:

  • 添加了指向堆栈跟踪的链接
  • 啊,是的,我没有在运行(dt: Any).toString 时遇到错误。除非我遗漏了什么,否则 & dt.toString 会做两件不同的事情。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 2010-11-26
  • 2015-04-25
相关资源
最近更新 更多