#ruby
#ruby
Вопрос:
Мне просто интересно, является ли .length()
это просто псевдонимом .length
, потому что они возвращают один и тот же результат:
[38] pry(main)> temp = [1,2,3]
=> [1, 2, 3]
[40] pry(main)> temp.length
=> 3
[41] pry(main)> temp.length()
=> 3
Ответ №1:
Разницы нет. Во многих случаях в Ruby вы можете опустить круглые скобки вокруг аргументов.
temp.length
temp.length()
идентичны. То же самое верно для
temp.push(4)
temp.push 4
Комментарии:
1. Это необычно. Означает ли это, что он может функционировать как в командной строке, так и в структурах, подобных классу, или, по крайней мере, может сказать, что синтаксис командной строки также может работать в структурах, подобных классу?
2. @Дорогая, это просто меньше беспорядка, что является одним из видов эстетики дизайна Ruby.
x.y.z
выглядит чищеx().y().z()
и делает многие вещи аккуратными и аккуратными в Ruby, которые совершенно уродливы на других языках.3. Стоит упомянуть, что бывают случаи, когда вы хотите их использовать или должны, например, в случае
temp.push 4 * 5
илиtemp.push(4) * 5
, которые означают две совершенно разные вещи.4. Вам нужны скобки, если вы передаете аргументы и блок как однострочный, например
fn(a, b) { |c| }
, или когда запятые между аргументами будут неоднозначными, например[fn(1), fn(2)]
, илиfn fn(a), fb(b)
… но синтаксическому анализатору никогда не потребуются скобки, если вы не вставляете никаких аргументов5. Также сообщение об ошибке в случае опечатки более точное:
rnd
=> NameError (неопределенная локальная переменная или метод rnd для main:Object) противrnd()
=> NoMethodError (неопределенный метод rnd для main:Object)
Ответ №2:
В Ruby, когда вы определяете или вызываете (выполняете, используете) метод, вы можете опустить круглые скобки.
Итак, эти строки означают одно и то же:
temp.length
temp.length()
http://ruby-for-beginners.rubymonstas.org/bonus/parentheses.html
Ответ №3:
Просто дополнение к этим ответам.
Вы также можете опустить круглые скобки в определениях методов, а не только в вызовах методов.
Например:
def length
1
end
def length()
2
end
http://ruby-for-beginners.rubymonstas.org/bonus/parentheses.html