我是红宝石的初学者。我想修复一个邮件软件中的错误。我修改的代码包含在下面:
@headers[:recipient] = {
"To" => (cc.map do |p|
if not p.full_address == "mail@fake.sender.example.com"
p.full_address
end),
"Cc" => [],
}
不幸的是,这给了我这些错误:
home/tymon/mmm/lib/mmm/modes/reply_mode.rb:103: syntax error, unexpected ')', expecting keyword_end (SyntaxError)
end),
^
/home/tymon/mmm/lib/mmm/modes/reply_mode.rb:104: syntax error, unexpected =>, expecting keyword_end
"Cc" => [],
我不知道他们的原因。我阅读了关于块的Ruby文档,它应该运行良好。请给我一些建议。
答案 0 :(得分:1)
我认为不允许end)
。它需要是一个自己的行或者至少有一个分号。我更倾向于使用括号:
@headers[:recipient] = {
"To" => (cc.map { |p|
if not p.full_address == "mail@fake.sender.example.com"
p.full_address
}),
"Cc" => [],
}
我可能会将您的逻辑更改为内联版本并将其压缩以避免任何零条目:
@headers[:recipient] = {
"To" => (cc.map { |p| p.full_address == "mail@fake.sender.example.com" ? nil : p.full_address}.compact),
"Cc" => [],
}
更新由于@sawa提到'(开始;结束)'有效。再看一遍,我意识到它在抱怨,因为'if'不是'结束'。
@headers[:recipient] = {
"To" => (cc.map do |p|
if not p.full_address == "mail@fake.sender.example.com"
p.full_address
end
end),
"Cc" => [],
}
尽管如此,我最喜欢中间风格。