2017-02-10 2 views
0

Я не могу понять, почему в третьем заявлении Ruby возникает синтаксическая ошибка, когда после запятой нет пробела, а пространство после puts.Это ошибка в Ruby или это правильное поведение в Ruby?

[email protected] MINGW64 ~ 
$ irb 
Switch to inspect mode. 
puts("Hello, World!","Good bye, World!") 
puts("Hello, World!","Good bye, World!") 
Hello, World! 
Good bye, World! 
nil 


puts ("Hello, World!") 
puts ("Hello, World!") 
Hello, World! 
nil 


puts ("Hello, World!","Good bye, World!") 
puts ("Hello, World!","Good bye, World!") 
SyntaxError: (irb):7: syntax error, unexpected ',', expecting ')' 
puts ("Hello, World!","Good bye, World!") 
        ^
(irb):7: syntax error, unexpected ')', expecting end-of-input 
     from C:/Ruby21-x64/bin/irb:11:in `<main>' 

puts("Hello, World!", "Good bye, World!") 
puts("Hello, World!", "Good bye, World!") 
Hello, World! 
Good bye, World! 
nil 

exit() 
exit() 

[email protected] MINGW64 ~ 
$ 

ответ

3

Правое поведение в Рубине. Вызов функции может следовать одному из этих двух моделей:

function(arg1, arg2...) 
function arg1, arg2... 

но не

function (arg1, arg2...) 

т.е. при использовании круглых скобок для аргументов, не может быть пробелом между именем функции и скобкой.

Обратите внимание, что это:

function (arg1) 

на самом деле просто эквивалентно

function((arg1)) 

и, таким образом, действительным. Тем не менее,

function (arg1, arg2) 

пытается быть разобрано как

function((arg1, arg2)) 

который не подходит Ruby, грамматику.

В запятой нет никаких правил интервалов, которые я могу запомнить; все они действительны:

function(arg1, arg2) 
function(arg1 , arg2) 
function(arg1 ,arg2) 
function(arg1,arg2) 

, но стили кодирования предпочтительнее первого.