Когда требуется ключевое слово do в Ruby?
377 просмотра
2 ответа
Например, присутствие или отсутствие do
в следующем коде влияет на поведение программы вообще?
while true do
puts "Hi"
break
end
while true
puts "Hi"
break
end
Автор: Steven
Источник
Размещён: 12.11.2019 09:52
Ответы (2)
7 плюса
В соответствии с разделом 5.2.1 книги по языку программирования Ruby :
do
Ключевое слово вwhile
илиuntil
петле , какthen
ключевое слово вif
заявлении: он может быть опущен в целом до тех пор , как новая строка (или точка с запятой) появляется между состоянием контура и телом цикла.
Так что нет, это не изменит поведение, это просто необязательный синтаксис.
Автор: DiegoSalazar Размещён: 12.01.2015 07:166 плюса
Давайте разберемся!
Для быстрого ответа мы можем посмотреть документацию Ruby и найти http://www.ruby-doc.org/core-2.1.1/doc/syntax/control_expressions_rdoc.html#label- while+ Loop, в котором говорится, что
Ключевое слово do не обязательно.
Итак, эти два примера эквивалентны, но идентичны ли они? Они могут делать то же самое, но, возможно, есть причина отдать предпочтение одному из них. Мы можем посмотреть на AST, который генерируют эти примеры, и посмотреть, есть ли разница.
> gem install ruby_parser
> irb
> require 'ruby_parser'
=> true
> with_do = <<-END
while true do
puts "Hi"
break
end
END
=> "while true do\n puts \"Hi\"\n break\nend\n"
> without_do = <<-END
while true
puts "Hi"
break
end
END
=> "while true\n puts \"Hi\"\n break\nend\n"
> RubyParser.new.parse with_do
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true)
> RubyParser.new.parse without_do
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true)
Нет. Эти два примера выполняют точно такие же инструкции, поэтому мы можем выбрать любой стиль, который нам удобнее читать. Распространенным предпочтением является опускание, do
когда это возможно: https://github.com/bbatsov/ruby-style-guide#no-multiline- while-do
Вопросы из категории :
- ruby Вызов команд оболочки из Ruby
- ruby Почему в Ruby нет реального StringBuffer или StringIO?
- ruby Как создать случайный 10-значный номер в рубине?
- ruby Каков наилучший способ конвертировать массив в хеш в Ruby
- ruby Determine file type in Ruby
- ruby Раскладка каталога для чистого Ruby-проекта
- ruby Как я могу "красиво" отформатировать вывод JSON в Ruby on Rails?
- ruby Как сгенерировать случайную строку в Ruby
- ruby Изменения модели документа CouchDB?
- ruby JRuby on Rails против Ruby on Rails, в чем разница?
- ruby ruby / ruby ??on rails обнаружение утечек памяти
- ruby В Ruby on Rails, как мне форматировать дату с суффиксом «th», как в «Sun Oct 5th»?
- ruby Как найти, где метод определяется во время выполнения?
- ruby Ruby: Как опубликовать файл через HTTP как multipart / form-data?
- ruby Получить имя текущего исполняемого метода
- ruby Порядок столбцов результатов из вызова rails ActiveRecord find_by_sql
- ruby Что такое синглтон-класс в ruby?
- ruby Как заменить ударные латинские буквы в Ruby?
- ruby Вычтите n часов из DateTime в Ruby
- ruby Разбирайте содержимое электронной почты из указанного ответа