2010-10-17 1 views
61

Изучая Ruby, я заметил, что во всех примерах нет точек с запятой. Я знаю, что это прекрасно, если каждое утверждение находится на собственной линии. Но то, что мне интересно, может вы используете точки с запятой в Ruby?Можете ли вы использовать точки с запятой в Ruby?

Заранее благодарен!

+0

И для рубинов: там, где нужно использовать точки с запятой? Есть ли польза в этом? Я знаю, что когда я пишу Ruby-код, я рефлексивно добавляю их. –

+0

@ Andy Не используйте точки с запятой, если вы не хотите помещать несколько операторов в одну строку, которые [вы должны избегать делать так или иначе] (http://www.caliban.org/ruby/rubyguide.shtml#semicolon). –

+0

@Yaser: Мне нужны точки с запятой.Потому что, когда есть функция на строке без точки с запятой, для меня нужны аутоинденты vim, которые я не хочу делать. –

ответ

85

Да.

Ruby не требует от нас каких-либо символов для разделения команд, если мы не хотим объединять несколько операторов вместе в одной строке. В этом случае в качестве разделителя используется точка с запятой (;).

Источник: http://articles.sitepoint.com/article/learn-ruby-on-rails/2

+1

Удивительный, спасибо! –

+0

, но следует ли использовать точку с запятой? – rocketspacer

1

Да, точки с запятой могут использоваться как разделители операторов в Ruby.

Хотя мой типичный стиль (и самый код, который я вижу) помещает строку строки в каждую строку, поэтому использование ; довольно не нужно.

26

Как примечание стороны, полезно использовать точку с запятой в вашем (J) IRB сессии, чтобы избежать выводя до смешного длинное значение выражения, например,

irb[0]> x = (1..1000000000).to_a 
[printout out the whole array] 

против

irb[0]> x = (1..100000000).to_a; 1 
1 

Nice особенно для MyBigORMObject.find_all звонков.

2

Единственная ситуация, с которой я столкнулся, это точки с запятой полезны при объявлении псевдонимов для 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 

Для меня это на самом деле не отнимать от читаемости.

3

Точка с запятой: да.

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 
0

Это может быть интересно использовать точку с запятой, чтобы сохранить синтаксис блока, как в этом примере:

a = [2, 3 , 1, 2, 3].reduce(Hash.new(0)) { |h, num| h[num] += 1; h } 

Поддерживается одна строка кода.