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)
如果你们知道答案,请随意用括号解释。
答案 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