Scala阶乘方法(即“!”):删除点运算符?
我设法在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.!) } 只是: 正如文档中所指出的,“后缀运算符与分号推断的交互
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