目前,我有一堆的函数检查字符串符合一定的情况下,例如isValidAlphaNumericString或isValidUserName。 它使用我自己的隐stringOps类。 它是与复杂的要求,如作者姓名等需要字符串只有没有连续-_尤其是在处理时非常有用。 或空格字符等使用正则表达式复杂的。 但是,为什么要停止呢? 该字符串不正确的约束意味着一些功能可以匿名函数映射到它,并打破了变量,你已经检查后。 这不是一个很安全的进行方式。 我想为每个绑定到一个特质ConstrainedString,让我来指定如何与方法每种类型的交易,这些约束字符串创建类型。
我与它的设计方挣扎。 基本上有两件事情我需要帮助。
当一个函数打破约束,会发生什么? 有没有办法赶上这个在编译时? 我只从有,我知道不会打破约束,即限制方法,我喜欢的类型。 2级AlphaNumericString的级联总是返回字母数字字符串? 还是我的实际类型选项[字符串]所以如果合同被打破了值变为无? 必须有来自世界各地抛出异常预留一个更好的办法。
林假设实现这一目标的最佳途径是通过一个弦乐器的类型类相似,这个例子http://danielwestheide.com/blog/2013/02/06/the-neophytes-guide-to-scala-part-12-type-classes html的如
除了我希望能够写
val foo:Bar = "This is a valid Bar"
我相信适当的方式是提供串的隐式转换通过指向一个栏应用()方法,该方法检查是否该方法是有效的栏来巴。 梦想是有工作是相同的数字做Scala和具有该编译失败。
//fails to compile due to - not being a valid character
val foo:AlphaNumericString = "-Adlsa85464"
如果任何人实际上已经实施类似的东西ID爱的代码看,否则:
有一个简单的方法来保持约束,无论功能问题
是我对如何处理这个问题的正确的理论?