Вы, наверное, уже знаете, что в идиоматическом Ruby никогда не будет вставляться пробел между концом метода и списком аргументов в скобках. Некоторые руководства по стилю явно запрещают это .
Есть и прагматическая причина.
1.9.2-p290 > def concat(a, b)
1.9.2-p290 > a + b
1.9.2-p290 > end
1.9.2-p290 > concat 'foo', 'bar'
=> "foobar"
1.9.2-p290 > concat('foo', 'bar')
=> "foobar"
1.9.2-p290 > concat ('foo', 'bar')
SyntaxError: (irb):27: syntax error, unexpected ',', expecting ')'
Вы столкнетесь с ошибками при вызове любого метода, а не только Kernel.raise
.
Я не знаком с внутренними компонентами Ruby, но я предполагаю, что причина этого в том, что когда пробел предшествует списку аргументов, Ruby ожидает стиль "без паренов" Так что, конечно, это работает:
1.9.2-p290 :035 > concat ("bar"), ("foo")
=> "barfoo"
Предположительно, Ruby пытается оценить содержимое каждого выражения в скобках перед передачей результата в метод. Я бы предположил, что для написания raise (TypeError, "Error message")
требуется, чтобы Ruby вычислил только TypeError, "Error message"
, что, конечно, не помогает.