2012-05-12 3 views
2
def [](index) 
    case index 
    when 0, -2: @x 
    when 1, -1: @y 
    when :x, "x": @x 
    when :y, "y": @y 
    else nil 
    end 
end 


Ошибка при определении собственного метода массив/хэш-

array.rb:3: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n' 
    when 0, -2: @x 
      ^
array.rb:5: syntax error, unexpected ':', expecting keyword_end 
    when :x, "x": @x 
      ^
array.rb:6: syntax error, unexpected ':', expecting keyword_end 
    when :y, "y": @y 
      ^
array.rb:8: warning: else without rescue is useless 
array.rb:9: syntax error, unexpected keyword_end, expecting $end 

Я пишу это как из книги, Рубиновое язык программирования.

Моя рубин версия рубин 1.9.3p0

Кто-нибудь видел это раньше?

+1

синтаксисе 'случае/when' заявление было изменено с рубином 1,8 до рубинового 1,9. Вот в чем причина. – Casper

+1

Нет, не было. Синтаксис двоеточия никогда не разрешался, даже в 1.8. Это просто случайно сработало. –

ответ

5

Я предлагаю вам использовать правильную форму case..when..then

def [](index) 
    case index 
    when 0, -2 then @x 
    when 1, -1 then @y 
    when :x, "x" then @x 
    when :y, "y" then @y 
    end 
end 
2

try ";" или новой строки вместо ":".

case index 
    when 0, -2; @x 

case index 
    when 0, -2 
    @x 
+0

Спасибо. Ваше решение сработало. Я думаю, что авторы, вероятно, хотели сказать ';' вместо ':'. –