gpt4 book ai didi

scala - 在值类上使用私有(private)构造函数是否会抵消值类的好处?

转载 作者:行者123 更新时间:2023-12-05 03:13:58 25 4
gpt4 key购买 nike

我正在考虑制作一个值类,该类对如何实例化它有一些保护措施。举个例子,假设我想要一个非负整数:

class NonNegInt private (val value: Int) extends AnyVal

object NonNegInt {
def apply(value: Int): Try[NonNegInt] = Try {
if (value >= 0) new NonNegInt(value) else throw new IllegalArgumentException("non-negative integers only!")
}
}

我唯一担心的是私有(private)构造函数可能使 scala 编译器无法将 NonNegInt 视为原始 int。这是真的吗?

最佳答案

如果这里的“视为原语”意味着“避免分配”,那么这确实行不通,但不是因为私有(private)构造函数。

Value Classes Guide 中所述

此规则的另一个实例是将值类用作类型参数。例如,即使是对身份的调用,也必须创建实际的 Meter 实例。

def identity[T](t: T): T = t
identity(Meter(5.0))

基本上,因为 identity[T] 是参数化的,所以在值类型上调用它需要分配一个实例。 Try[T] 是相同的情况:Try { ... } "block"是参数化函数 Try.apply[T] 的调用,其中 T 是 NonNegInt。此调用将需要分配 NonNegInt 实例。

关于scala - 在值类上使用私有(private)构造函数是否会抵消值类的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711532/

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