我正在学习ruby并且在使用%Modulus总和时遇到了问题。
puts "example #{101 % 4}"
以上在终端打印1,这是我的预期。
为什么下面打印101在终端?当然和上面一样吗?
puts "example #{100 + 1 % 4}"
据我所知,%只是另一种说法'X除以Y而剩下的J“。所以第二个例子肯定也应该返回1?
非常感谢任何帮助。
答案 0 :(得分:5)
括号很重要。由于运算符优先级规则,第二个示例被ruby视为
100 + (1 % 4)
哪个给出了
100 + 1
等于101
你可能意味着
(100 + 1) % 4
答案 1 :(得分:3)
因为%
的优先级高于+
。所以你可以做类似
puts "example #{(100 + 1) % 4}"
答案 2 :(得分:2)
正如所指出的那样,它与运算符优先级有关,例如,您可以使用括号()
来控制运算符优先级。 Ruby的rules在官方Ruby文档中概述如下:
从最高到最低,这是ruby的优先表。高 优先操作发生在低优先级操作之前。
!, ~, unary + ** unary - *, /, % +, - <<, >> & |, ^ >, >=, <, <= <=>, ==, ===, !=, =~, !~ && || .., ... ?, : modifier-rescue =, +=, -=, etc. defined? not or, and modifier-if, modifier-unless, modifier-while, modifier-until { } blocks
有关顺序或优先顺序的更一般概述(在编程范围之外),请参阅维基百科条目here。
值得注意的是,如果存在平局(即计算中有两个具有相同优先级的运算符),则操作将从左向右执行。
考虑:
10 % 3 * 4
#=> 4
10 * 3 % 4
#=> 2
或
10 * 10 / 2 * 4
#=> 200
10 / 10 * 2 * 4
#=> 8