gpt4 book ai didi

scala - 使用 <> 在 Scala 中模拟 !=

转载 作者:行者123 更新时间:2023-12-01 07:06:48 25 4
gpt4 key购买 nike

我试图在 Scala 中用 <> 模拟 != 。

implicit def conditional[A](left : A) = new {
| def<>[A](right : A) = (left != right)
| }

在什么情况下此仿真不起作用

最佳答案

这应该总是有效的,但可能不是你想象的那样。你期望这两种类型是一样的吗?如果是这样,应该是

class Conditionalize[A](left: A) { def <>(right: A) = left != right }
implicit def conditional[A](left: A) = new Conditionalize(left)

如果没有,使用单独的类型参数会更清楚:
implicit def notequality[A](a: A) = new { def <>[B](b: B) = a != b }

前者仅在 LHS 不需要隐式转换为与 RHS 相同的类型时才有效。定义有条件但不具有音符质量:
implicit def int_to_string(i: Int) = i.toString
scala> "5" <> 5
res0: Boolean = false

scala> 5 <> "5"
<console>:9: error: type mismatch;
found : java.lang.String("5")
required: Int
5 <> "5"

因为你不能链接隐式。

后一种情况将像 != 一样工作。 (编辑:关于 null 值的一个特殊情况,由于其类型 Null 。)

这两个都将包装原语,这会使繁重的工作变慢。但是 Scala 避免了 Java 的怪异之处 0.0 == -0.0但是 (new java.lang.Double(0.0)).equals(new java.lang.Double(-0.0))是假的,所以你不应该注意到结果的差异。

如果您愿意,可以添加 @specialized使比较器以额外的代码大小为代价避免装箱原语。

关于scala - 使用 <> 在 Scala 中模拟 !=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3981582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com