string – Scala中的条件隐式函数
我正在尝试在
Scala中设计DSL.为此,我想在精确的字符串上创建一个隐式函数.
我知道要为任何String创建一个隐式函数,我可以写: class StringPlus(str: String) { def some_function(): Unit = do_something } implicit def string2StringPlus(str: String) = new StringPlus(str) 但我不知道如何修改它只为某些字符串创建这个隐式函数.是否可以为隐式函数赋予布尔条件,以便仅在布尔条件为真时才创建隐式函数(例如,如果字符串的长度为5或更大,如果字符串的第一个字母是字母“a”等)并不是所有的字符串? 解决方法
简短的回答
不,这是不可能的. 类型和含义在编译时解析,而String的实际值是运行时实体,即运行之间可能不同.因此,在编译时不可能知道将哪个字符串值传递给隐式函数. 答案很长 这可能是有可能的,但包含了大量的魔术类型,在可读性和实用性方面肯定不是一个好的解决方案. 以下是您的想法:您可以为字符串创建自定义类型,并对该类型中的必要条件进行编码.例如,对于以“a”开头的字符串,您将使用AString [String […]],对于3个字母的字符串,您将使用String [String [String [StringNil]]],依此类推. 然后,所有字符串转换将产生适当的类型,例如,当您使用字母A添加String […]时,您将获得AString [String […]],依此类推. 看看dependent types和HList的实施. 但同样,在你的情况下,它几乎不实用. UPD:另请参阅Refined项目,该项目提供类型级谓词. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |