看到像this one这样的问题出现的答案涉及恐怖表演,比如试图抓住NPE并将堆叠的名字从堆栈轨迹中挖出来,我问这个问题以便我可以回答它。如何在scala中编写一个合适的null-safe合并运算符?
评论或进一步改进欢迎。
看到像this one这样的问题出现的答案涉及恐怖表演,比如试图抓住NPE并将堆叠的名字从堆栈轨迹中挖出来,我问这个问题以便我可以回答它。如何在scala中编写一个合适的null-safe合并运算符?
评论或进一步改进欢迎。
像这样:
case class ?:[T](x: T) {
def apply(): T = x
def apply[U >: Null](f: T => U): ?:[U] =
if (x == null) ?:[U](null)
else ?:[U](f(x))
}
而且在行动:
scala> val x = ?:("hel")(_ + "lo ")(_ * 2)(_ + "world")()
x: java.lang.String = hello hello world
scala> val x = ?:("hel")(_ + "lo ")(_ => (null: String))(_ + "world")()
x: java.lang.String = null
你应该已经回答了这个问题,而不是创建一个新的。或者,除了。 – 2009-09-01 23:59:37
如果你这么说。当我回答一个问题超过约24小时后,问题的答案在默默无闻,无论其相对优点(并考虑到我只回答斯卡拉问题,我有一些想法我的答案的价值。) – extempore 2009-09-03 02:28:02
谢谢,这是恐怖的看到涉及例外的解决方案。除非你想减慢你的应用几个数量级。 – smartnut007 2012-08-07 03:48:28