В чем разница между .длина и .length() в Ruby?

#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