Scala阶乘方法(即“!”):删除点运算符?

Scala阶乘方法(即“!”):删除点运算符?,scala,implicit-conversion,Scala,Implicit Conversion,我设法在scala中为整数定义了一个新的运算符“!”阶乘运算符。 同时,我想在不使用点操作符的情况下调用它,这样就不会抛出警告(我不想禁用警告功能)。可能吗 这是我的测试代码: 斯卡拉酒店 implicit class IntegerUtils(wrapped:Int) { def !() = (2 to wrapped).product } (1 to 5).foreach { v => println (v.!) } 只是: 正如文档中所指出的,“后缀运算符与分号推断的交互

我设法在scala中为整数定义了一个新的运算符“!”阶乘运算符。 同时,我想在不使用点操作符的情况下调用它,这样就不会抛出警告(我不想禁用警告功能)。可能吗

这是我的测试代码:

斯卡拉酒店

implicit class IntegerUtils(wrapped:Int) {
    def !() = (2 to wrapped).product
}

(1 to 5).foreach { v => println (v.!) }
只是:


正如文档中所指出的,“后缀运算符与分号推断的交互效果很差。大多数程序员都会因此而避免使用它们。”但是,如果您在特定文件中大量使用后缀运算符,那么它可能非常方便。

我认为这是不可能的。还请注意,您可以使用
i to k by-1
代替
i.to(k,-1)
还请注意,
by-1
中没有必要:使用
2包装
。还要注意,scala集合中有方法
product
(2到4)。product
=>
24
,因此您不需要在此处使用
折叠。是的,你说得对,product method更好(因为我现在只是学习Scala,我没有花时间研究范围文档)。同样,你在这个顺序中使用(2到4)是正确的,因为我使用的是乘法。我已经编辑了代码。Thanks@senia我估计
(2到包装)。产品
将失败1次,但结果证明它是有效的
(2到1)
是一个空范围,空集合的乘积显然是1。
import language.postfixOps
implicit class IntegerUtils(wrapped:Int) {
  def !() = (2 to wrapped).product
}

(1 to 5).foreach { v => println (v!) }            //> 1
                                                  //| 2
                                                  //| 6
                                                  //| 24
                                                  //| 120