gpt4 book ai didi

Scala DSL : method chaining with parameterless methods

转载 作者:行者123 更新时间:2023-12-04 15:14:38 28 4
gpt4 key购买 nike

我正在创建一个小的 scala DSL 并遇到以下问题,我真的没有解决方案。我想要实现的一个小概念示例:

(Compute
write "hello"
read 'name
calc()
calc()
write "hello" + 'name
)

定义此 dsl 的代码大致如下:

Object Compute extends Compute{
...
implicit def str2Message:Message = ...
}
class Compute{
def write(msg:Message):Compute = ...
def read(s:Symbol):Compute = ...
def calc():Compute = { ... }
}

现在的问题是:如何在 calc 之后去掉这些括号?是否可以?如果是这样,如何?由于编译错误,仅在定义中省略它们无济于事。

最佳答案

好的,我想,我找到了一个可以接受的解决方案......我现在实现了这种可能的语法

 | write "hello"
| read 'name
| calc
| calc
| write "hello " + 'name

使用名为“|”的对象,我几乎可以编写出我想要的 dsl。通常,一个“;”如果它是无参数的,则在 calc 之后需要。这里的技巧是接受 DSL 对象本身(这里是下一行的“|”)。使这个参数隐式也允许 calc作为此代码中的最后一条语句。
好吧,看起来绝对不可能按照我想要的方式拥有它,但这也没关系

关于Scala DSL : method chaining with parameterless methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9173848/

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