Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在Groovy中定义一个新操作符吗?_Groovy_Operators_Dsl - Fatal编程技术网

可以在Groovy中定义一个新操作符吗?

可以在Groovy中定义一个新操作符吗?,groovy,operators,dsl,Groovy,Operators,Dsl,可以在Groovy中定义一个全新的操作符吗?我想表达一种交易,有人以10美元的价格购买200件商品,如下所示: def trade = 200 @ 10 这是可以实现的吗 谢谢 编辑:我想说得更清楚一点,我感兴趣的是定义一个操作符,而不是添加一个方法。干杯。我不太确定您如何为@标志执行此操作,但您当然可以添加这样的操作,我发现这样的操作更具表现力: Number.metaClass.buyFor { Integer price -> delegate * price } def

可以在Groovy中定义一个全新的操作符吗?我想表达一种交易,有人以10美元的价格购买200件商品,如下所示:

def trade = 200 @ 10
这是可以实现的吗

谢谢


编辑:我想说得更清楚一点,我感兴趣的是定义一个操作符,而不是添加一个方法。干杯。

我不太确定您如何为
@
标志执行此操作,但您当然可以添加这样的操作,我发现这样的操作更具表现力:

Number.metaClass.buyFor { Integer price ->
   delegate * price
}

def result = 200.buyFor(10)
println result

我们一直希望能够在Groovy中通过用户定义操作符,但到目前为止,我们还没有解决随之而来的问题。因此,当前状态是Groovy不支持自定义运算符,只支持已经在使用的运算符。

感谢您的输入。不幸的是,这并没有真正回答我的问题。我知道我可以通过“monkey patching”添加方法,但我确实想定义一个运算符。看起来,
@
符号还不受支持。如果您可以满足任何可用的运营商的要求,您可以如上所述实现它。感谢您的参与。你很接近,但没有雪茄。正如我向Ben提到的,我正在寻找一个关于是否可以定义一个新操作符而不是添加一个方法的答案。不,目前这是不可能的,您必须使用现有的运算符来定义自己的运算符似乎已设法使用提供的列表中未提及的
>>
运算符来定义自己的运算符。有人能解释一下怎么做,或者给出一个明确的答案吗?我感到震惊,我觉得我不能接受目前的答案。感谢您的支持。Java和Groovy中都已经存在
>
操作符,它是
右移无符号
操作符。我在代码中翻找时;-)@蒂姆,谢谢你把它清理干净。我接受了本杰明的回答,同时也接受了他随后的评论。这个回答已经写了三年了。这个的状态有变化吗?没有。。。如果没有资金,明年也不太可能发生变化
Number.metaClass."@" {Integer x -> delegate * x} 

assert (2.'@' (2)) == 4