print sentence.scan(/\[(\w+)\]/).all? do |word|
@words.keys.include? word[0].to_sym
end
我已经打印了@words.keys.include? word[0].to_sym
的各个值,但它们并非都是真的,但它会打印true
。我想这可能是因为它的评估如下:
(print sentence.scan(/\[(\w+)\]/).all?) do |word|
@words.keys.include? word[0].to_sym
end
但我希望它像
一样进行评估print (sentence.scan(/\[(\w+)\]/).all? do |word|
@words.keys.include? word[0].to_sym
end)
但是,添加括号会导致
syntax error, unexpected keyword_do_block, expecting ')'
如何更改评估代码的顺序?
修改
除非上述情况属实,否则我想返回true而不是print,如:
@sentences.reject do |sentence|
!(sentence.scan(/\[(\w+)\]/).all? { |word| @words.keys.include? word[0].to_sym })
end
但它拒绝一切。
答案 0 :(得分:4)
你正在以某种方式为自己创造痛苦:
打印的论点含糊不清。您应该使用print(...)
,不能有空格。
Do / end绑定比{...}
块更紧密。同样,您的示例对于解析器来说有点模棱两可。
尝试使用不那么模糊的语法,看看是否在查看替代结构之前清除了这些内容。
答案 1 :(得分:3)
此变体适用于我:
print (sentence.scan(/\[(\w+)\]/).all?{|word| words.keys.include? word[0].to_sym })
第二种变体:
print begin
(sentence.scan(/\[(\w+)\]/).all? do |word|
words.keys.include? word[0].to_sym
end)
end