gpt4 book ai didi

scala - 在 Scala 中表示值约束的最佳方法?

转载 作者:行者123 更新时间:2023-12-05 00:39:21 25 4
gpt4 key购买 nike

例如,表达 Int 的最佳方式是什么?字段或参数永远不应该是负数?

首先想到的是类型上的注释,例如 case class Foo(x: Int @NotNegative) .但是我必须发明我自己的注释,并且不会有任何编译时检查或任何东西。

有没有更好的办法?

最佳答案

为什么不使用单独的数据类型?

class Natural private (val value: Int) {
require(value >= 0)

def +(that:Natural) = new Natural(this.value + that.value)
def *(that:Natural) = new Natural(this.value * that.value)
def %(that:Natural) = new Natural(this.value % that.value)
def |-|(that:Natural) = Natural.abs(this.value - that.value) //absolute difference

override def toString = value.toString
}

object Natural {
implicit def nat2int(n:Natural) = n.value
def abs(n:Int) = new Natural(math.abs(n))
}

用法:
val a = Natural.abs(4711)
val b = Natural.abs(-42)
val c = a + b
val d = b - a // works due to implicit conversion, but d is typed as Int
println(a < b) //works due implicit conversion

关于scala - 在 Scala 中表示值约束的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4491159/

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