scala – 如何提高基于字符串或双精度值的类型安全性?
发布时间:2020-12-16 10:06:40 所属栏目:安全 来源:网络整理
导读:我想知道使用我的代码实现类型安全的最佳方法,当各种值可能都是字符串或双打时,但仍然不兼容.例如,我可能有单位为磅和千克,但我应该被禁止分配给另一个.同样地,我可能有一个人ID作为字符串和一个动物ID的查找表作为Map [String,Int],但是我应该被禁止在动物
我想知道使用我的代码实现类型安全的最佳方法,当各种值可能都是字符串或双打时,但仍然不兼容.例如,我可能有单位为磅和千克,但我应该被禁止分配给另一个.同样地,我可能有一个人ID作为字符串和一个动物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 但是有几个问题使得它不起作用.建议适合精神的东西? 解决方法
出于显而易见的原因,您无法扩展String.我建议使用案例类:
case class PersonId(id:String) case class AnimalId(id:String) 语法变得有点复杂,但不是那么多.在模式匹配时,您可以轻松使用案例类! var p: PersonId = PersonId("1234") var tab: Map[AnimalId,Int] = Map(AnimalId("foo") -> 5,AnimalId("bar") -> 6) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |