语法错误 - 意外“)”

时间:2015-01-09 21:59:47

标签: ruby error-handling syntax-error

我是红宝石的初学者。我想修复一个邮件软件中的错误。我修改的代码包含在下面:

@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文档,它应该运行良好。请给我一些建议。

1 个答案:

答案 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" => [],
}

尽管如此,我最喜欢中间风格。