我试图解决coding puzzle:取字符串,并计算不包含重复字词的字符串。
此代码有效:
def validate(passphrase)
words = passphrase.split
words == words.uniq
end
passphrases = File.readlines("../input/passphrases.txt")
p passphrases.count {|phrase| validate(phrase)}
#=> 337
如果我使用计数块进行一次微小的更改,它会计算所有密码,而不是仅仅在通过块时返回true的密码:
p passphrases.count do |phrase|
validate(phrase)
end
#=>512
这是怎么回事?
答案 0 :(得分:3)
这是由于do
块的参数优先级。
你的第一个例子相当于:
p(passphrases.count {|phrase| validate(phrase)})
第do
块的第二个等同于:
p(passphrases.count) do |phrase|
validate(phrase)
end
将do
应用于p
函数。
如果您希望第二种情况与第一种情况匹配,请将整个块包装在括号中:
p(passphrases.count do |phrase|
validate(phrase)
end)