2015-01-09 69 views
0

我是初學者到紅寶石。我想修復一個郵件軟件中的錯誤。與修復我[應用荷代碼如下:SyntaxError - unexcepted「)」

@headers[:recipient] = { 
     "To" => (cc.map do |p| 
      if not p.full_address == "[email protected]" 
       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

我不認爲end)被允許。它需要是一個自己的行,或者至少在它後面有一個分號。我會更傾向於使用雖然括號:

@headers[:recipient] = { 
    "To" => (cc.map { |p| 
     if not p.full_address == "[email protected]" 
     p.full_address 
     }), 
    "Cc" => [], 
} 

而且我可能會改變你的邏輯來內聯版本和緊湊,以避免任何零條目:

@headers[:recipient] = { 
    "To" => (cc.map { |p| p.full_address == "[email protected]" ? nil : p.full_address}.compact), 
    "Cc" => [], 
} 

更新作爲@sawa提到'(begin; end)'是有效的。再看一遍,我意識到這是抱怨,因爲'如果'不'結束'。

@headers[:recipient] = { 
    "To" => (cc.map do |p| 
     if not p.full_address == "[email protected]" 
      p.full_address 
     end 
     end), 
    "Cc" => [], 
} 

不過,我最喜歡我的中間風格。

+0

這個答案是錯誤的。 '(begin; end)'是語法的。 – sawa 2015-01-09 22:39:06

+0

@sawa - 很高興知道。 OP - 現在我更多地盯着它,因爲你沒有「結束」你的'如果'。不過,我最喜歡我最後的風格:) – 2015-01-10 00:14:45