首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala中的条件隐函数

Scala中的条件隐函数
EN

Stack Overflow用户
提问于 2016-04-14 00:00:31
回答 1查看 659关注 0票数 5

我正试图在Scala中设计一个DSL。为此,我想在精确的字符串上创建一个隐式函数。我知道要为任何字符串创建隐式函数,我可以编写:

代码语言:javascript
复制
class StringPlus(str: String) {
    def some_function(): Unit = do_something
}
implicit def string2StringPlus(str: String) = new StringPlus(str)

但是,我不知道如何修改它,以便只为某些字符串创建这个隐式函数。是否可以向隐式函数提供布尔条件,以便只在布尔条件为真时才创建隐式函数(例如,如果字符串的长度为5或更长,字符串的第一个字母是字母"a",等等)。而不是所有的弦乐?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 00:33:03

简短回答

不,这不可能。

类型和隐式是在编译时解析的,而字符串的实际值是运行时实体,也就是说,它在运行期间可能有所不同。因此,在编译时不可能知道哪个字符串值将传递给隐式函数。

长答案

它可能是可能的,但包含了大量的类型魔术,而且它在可读性和实用性方面肯定不是一个很好的解决方案。

如下所示:您可以为您的字符串创建自定义类型,并在该类型中编码必要的条件。例如,AString[String[...]]用于以"a“开头的字符串,String[String[String[StringNil]]]用于3个字母的字符串,依此类推。

然后,所有字符串转换都会产生适当的类型,例如,当您在String[...]前面加上字母A时,您将得到AString[String[...]],等等。

看看相依类型HList的实现。

但是,在你的情况下,这是不太现实的。

UPD:还可以查看提供类型级谓词的精练项目。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36611570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档