在案例中......例如
(10 + 20) * 10
=> 300
括号中的表达式片段在更高优先级乘法之前进行求值。所以它也适用于其他运算符。可以覆盖其他运算符,例如<< !
...等
答案 0 :(得分:2)
是的,你可以,你可以这样做
class String
def << str
self + "*" + str
end
end
puts "str" << "sss"
答案 1 :(得分:2)
当人们评估表达时,他们通常从表达式的左侧开始并向右侧工作。例如,从左到右工作,我们从以下表达式得到300的结果:
10 + 20 * 10 = 300
这是因为我们作为人类将10
添加到20
,结果为30
,然后将其乘以10
以得到300
。让Ruby执行相同的计算,你会得到一个非常不同的答案:
> 10 + 20 * 10
=> 210
这是运算符优先级的直接结果。 Ruby有一组规则告诉它应该在表达式中评估运算符的顺序。显然,Ruby认为乘法运算符(*)的优先级高于加法(+)运算符。
可以通过用括号括起表达式的低优先级部分来覆盖Ruby中内置的优先级。例如:
> (10 + 20) * 10
=> 300
在上面的例子中,括号中的表达式片段在较高优先级乘法之前被计算。
了解更多信息,请参阅:
我希望这让你清楚明白:)