奇怪(对我来说)在Rails中使用方法

时间:2011-01-28 19:15:17

标签: ruby-on-rails ruby

我是rails的新手,所以这个问题可能很愚蠢。 我见过很多像这样的代码

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

例如来自迁移的一些代码段

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

      t.timestamps
    end  

这里发生了什么? | T |传递给create_table方法还是? 我不能理解

1 个答案:

答案 0 :(得分:2)

|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])时,该参数由{{1}}填充。