gpt4 book ai didi

scala - 宏是否可以在 Scala 中进行自然链式比较?

转载 作者:行者123 更新时间:2023-12-03 02:56:22 24 4
gpt4 key购买 nike

Scala 不像 Python 那样提供链式比较:

// Python:
0 < x <= 3
// Scala:
0 < x && x <= 3

带有新宏功能的 Scala 2.10 是否能让程序员编写一个添加此功能的库?或者这超出了 Scala's macros 的范围?

宏似乎是实现此类语法糖的正确选择,因为它们不会使解析器/编译器变得复杂。

最佳答案

您不需要宏:

class ChainedComparisons[T : Ordering](val res: Boolean, right: T) {
def <^ (next: T) = new ChainedComparisons(res && Ordering[T].lt(right, next), next)
def <=^ (next: T) = new ChainedComparisons(res && Ordering[T].lteq(right, next), next)
}
implicit def chainedComparisonsToBoolean(c: ChainedComparisons[_]) = c.res

class StartChainedComparisons[T : Ordering](left: T) {
def <^(right: T) = new ChainedComparisons(Ordering[T].lt(left, right), right)
def <=^(right: T) = new ChainedComparisons(Ordering[T].lteq(left, right), right)
}
implicit def toStartChainedComparisons[T : Ordering](left: T) = new StartChainedComparisons(left)

用法:

scala> val x = 2
x: Int = 2

scala> 1 <^ x : Boolean
res0: Boolean = true

scala> 1 <^ x <^ 3 : Boolean
res1: Boolean = true

scala> 1 <^ x <^ 2 : Boolean
res2: Boolean = false

scala> 1 <^ x <=^ 2 : Boolean
res3: Boolean = true

scala> if (1 <^ x <^ 3) println("true") else println(false)
true

scala> 1 <=^ 1 <^ 2 <=^ 5 <^ 10 : Boolean
res5: Boolean = true

关于scala - 宏是否可以在 Scala 中进行自然链式比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13450324/

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