gpt4 book ai didi

string - Scala 中的条件隐式函数

转载 作者:行者123 更新时间:2023-12-02 19:52:52 25 4
gpt4 key购买 nike

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

class StringPlus(str: String) {
def some_function(): Unit = do_something
}
implicit def string2StringPlus(str: String) = new StringPlus(str)

但我不知道如何修改它以仅为某些字符串创建此隐式函数。是否可以给隐式函数一个 bool 条件,以便仅当 bool 条件为 true 时才创建隐式函数(例如,如果字符串的长度为 5 或更长,如果字符串的第一个字母是字母“a”等)而不是所有字符串?

最佳答案

简短回答

不,这是不可能的。

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

长答案

这也许是可能的,但包含大量的类型魔法,就可读性和实用性而言,它绝对不是一个好的解决方案。

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

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

看看dependent types以及实现HList .

但同样,这对于您的情况来说几乎不实用。

UPD:另请查看 Refined项目,提供类型级谓词。

关于string - Scala 中的条件隐式函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611570/

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