Странное (для меня) использование методов в Rails - PullRequest
0 голосов
/ 28 января 2011

Я новичок в рельсах, так что этот вопрос может быть глупым.Я видел много такого кода

method do |x|
 x.something
 x.blabla
end

Например, какой-то фрагмент из migrate

create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end  

Что здесь происходит?| Т |передается в метод create_table или?Я не могу изгнать

1 Ответ

2 голосов
/ 28 января 2011

|x| - это параметр, передаваемый в блок. Это особенность Ruby, не специфичная для Ruby on Rails.

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

# invoke proc on each element of the items array
def each(items, &proc)
  for i in (0...items.length)
    proc.call(items[i])
  end
end

my_array = [1,2,3];

# call 'each', passing in items and a block which prints the element
each my_array do |i|
  puts i
end

По сути, вы вызываете each и передаете ему две вещи: массив (my_array) и блок кода для выполнения. Внутренне each проходит по каждому элементу в массиве и вызывает блок этого элемента. Блок получает единственный параметр, |i|, который заполняется each при вызове proc: proc.call(items[i]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...