SyntaxError - 无例外的“)”

SyntaxError - unexcepted ")"

我是 ruby 的初学者。我想修复其中一个邮件软件中的错误。我应用的修复代码如下:

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

我认为 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" => [],
}

不过,我最喜欢我的中间风格。