При изучении Ruby я заметил, что во всех примерах нет точек с запятой. Я знаю, что это прекрасно, если каждое утверждение находится на собственной линии. Но мне интересно, можете ли вы использовать точки с запятой в Ruby?
Спасибо заранее!
При изучении Ruby я заметил, что во всех примерах нет точек с запятой. Я знаю, что это прекрасно, если каждое утверждение находится на собственной линии. Но мне интересно, можете ли вы использовать точки с запятой в Ruby?
Спасибо заранее!
Да.
Ruby не требует от нас использования какого-либо символа для разделения команд, если мы не хотим объединять несколько операторов вместе в одной строке. В этом случае в качестве разделителя используется точка с запятой (;).
Источник: http://articles.sitepoint.com/article/learn-ruby-on-rails/2
В качестве побочного примечания полезно использовать полуколонны в вашем (j) сеансе irb, чтобы избежать печати смехотворно длинного значения выражения, например.
irb[0]> x = (1..1000000000).to_a
[printout out the whole array]
против
irb[0]> x = (1..100000000).to_a; 1
1
Приятно, особенно для ваших вызовов MyBigORMObject.find_all.
Точка с запятой: да.
irb(main):018:0> x = 1; c = 0
=> 0
irb(main):019:0> x
=> 1
irb(main):020:0> c
=> 0
Вы даже можете запускать несколько команд, разделенных точками с запятой, в однострочном цикле
irb(main):021:0> (c += x; x += 1) while x < 10
=> nil
irb(main):022:0> x
=> 10
irb(main):023:0> c
=> 45
Единственная ситуация, с которой я столкнулся с этой точкой с запятой, полезен при объявлении псевдонимов для attr_reader.
Рассмотрим следующий код:
attr_reader :property1_enabled
attr_reader :property2_enabled
attr_reader :property3_enabled
alias_method :property1_enabled?, :property1_enabled
alias_method :property2_enabled?, :property2_enabled
alias_method :property3_enabled?, :property3_enabled
Используя точки с запятой, мы можем уменьшить это на 3 строки:
attr_reader :property1_enabled; alias_method :property1_enabled?, :property1_enabled
attr_reader :property2_enabled; alias_method :property2_enabled?, :property2_enabled
attr_reader :property3_enabled; alias_method :property3_enabled?, :property3_enabled
Мне это не совсем удаляет читаемость.
Да, точки с запятой могут использоваться как разделители операторов в Ruby.
Хотя мой типичный стиль (и большинство кода, который я вижу) помещает строку кода в каждую строку, поэтому использование ;
довольно не нужно.
Может быть интересно использовать точки с запятой, чтобы сохранить синтаксис блока, как в этом примере:
a = [2, 3 , 1, 2, 3].reduce(Hash.new(0)) { |h, num| h[num] += 1; h }
Поддерживается одна строка кода.