gpt4 book ai didi

scala - 如何提高基于 String 或 Double 的值的类型安全性?

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

当各种值可能都是 String 时,我想知道用我的代码实现类型安全的最佳方法。 s 或 Double s,但仍然不兼容。例如,我可能有磅和公斤的单位,但我应该禁止将一个分配给另一个。同样,我可能有一个人 ID 为 String和动物 ID 的查找表作为 Map[String,Int] ,但我应该被禁止在动物表中查找一个人。

从概念上讲,我正在寻找这样的东西:

class PersonId extends String
class AnimalId extends String

var p : PersonId = "1234"
var tab : Map[AnimalId,Int] = Map("foo" -> 5, "bar" -> 6)
tab.get(p) // Want this to cause a compile error

但是有几个问题使它不起作用。对符合精神的东西的建议?

最佳答案

我会用 value classes为了这。它的行为与常规 case 类几乎相同,但编译器对其施加了一些限制,并且通常它永远不必实际浪费时间/内存来创建包装器对象——它通常可以直接使用底层值。

case class Person(value: String) extends AnyVal
case class Animal(value: String) extends AnyVal

关于scala - 如何提高基于 String 或 Double 的值的类型安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29704711/

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