Используя действительно блокируются по сравнению с фигурными скобками {}

В новинку для рубина, поставившего Ваши перчатки новичка.

Есть ли какое-либо различие (неясно или практично) между следующими двумя отрывками?

my_array = [:uno, :dos, :tres]
my_array.each { |item| 
    puts item
}

my_array = [:uno, :dos, :tres]
my_array.each do |item| 
    puts item
end

Я понимаю, что синтаксис фигурной скобки позволил бы Вам помещать блок в одну строку

my_array.each { |item| puts item }

но за пределами этого там какие-либо неопровержимые доводы для использования одного синтаксиса по другому?

111
задан mu is too short 4 November 2018 в 03:58
поделиться

2 ответа

Ruby Cookbook говорит, что синтаксис кронштейна имеет более высокий уровень приоритета, чем DOUPLE.

Имейте в виду, что синтаксис кронштейна имеет более высокий приоритет, чем Делать ... День синтаксис. Рассмотреть следующее Два фрагмента кода:

1.upto 3 do |x|
  puts x
end

1.upto 3 { |x| puts x }
# SyntaxError: compile error

Второй пример работает только, когда используются скобки, 1. 1. 1. (3) {| x | ставит х}

98
ответ дан 24 November 2019 в 03:02
поделиться

Как правило, Конвенция состоит в том, чтобы использовать {} , когда вы выполняете небольшую работу, например, вызов метода или сравнение и т. Д. Так что это имеет смысл

some_collection.each { |element| puts element }

Но если у вас есть слегка сложная логика, которая переходит к нескольким строкам, то используйте .. end Как:

1.upto(10) do |x|
  add_some_num = x + rand(10)
  puts '*' * add_some_num
end

в основном, он входит в нее, если ваша логика блокировки идет в несколько строк и не может Быть установленным на той же линии, а затем используйте .. end И если ваша логика блока проста и просто простая / одна строка кода, затем используйте {} .

39
ответ дан 24 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: