通过三元运算符添加到哈希时的操作顺序是什么?:

时间:2013-02-05 10:59:22

标签: ruby

string.split().each do |word|
  hash[word]=hash[word] ? hash[word] + 1 : hash[word]

hash[word]=hash[word] ? hash[word] + 1 : 1会发生什么?

是否解释如下?

hash[word] = (hash[word] ? hash[word] + 1 : 1)

如果你们知道答案,请随意用括号解释。

3 个答案:

答案 0 :(得分:1)

在塞尔吉奥的建议的帮助下,实际上尝试括号:

该行

hash[word]=hash[word] ? hash[word] + 1 : hash[word]

就像写成

一样
hash[word]=(hash[word] ? hash[word] + 1 : hash[word])

这是Ruby首先检查是否存在来自equasion右侧的“hash [word]”,如果真正的Ruby将“hash [word]”替换为“hash [word] + 1”,如果false hash [word]用“1”代替

答案 1 :(得分:0)

如果您正在尝试计算单词出现次数,那么这是您的代码更清晰的版本:

hash = str.split.each_with_object(Hash.new{0}) do |word, memo|
  memo[word] += 1
end

至于你的问题:当你对运算符优先级有疑问时,将括号放在你认为应该是的位置,并查看代码是否符合你的想法。如果没有,那么你的优先权就错了。是时候阅读手册或在SO上提出更好的问题了。

答案 2 :(得分:0)

不要完全理解您想要确切知道的内容,但请查看此优先级表:http://www.techotopia.com/index.php/Ruby_Operator_Precedence