Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当使用rails创建表时,t做什么_Ruby On Rails_Rake - Fatal编程技术网

Ruby on rails 当使用rails创建表时,t做什么

Ruby on rails 当使用rails创建表时,t做什么,ruby-on-rails,rake,Ruby On Rails,Rake,我在中看到以下代码: class CreateProductsProc def create_table(table_name, options = {}) td = create_table_definition table_name, options[:temporary], options[:options] # blah blah yield td if block_given? # blah blah end def create_table(table_nam

我在中看到以下代码:

class CreateProducts

我搞不懂的是“做”是为了什么。它有什么好处?

您将
(在本例中为匿名方法)传递给
创建表
,而
创建表
将返回表定义的实例。当您将块的第一个参数指定为
t
时,您正在捕获该表定义。请在此处查看来源:

更具体地说:

在第184行,我们
将该表定义导出到匿名函数(
block
)。这基本上就是正在发生的事情:

def create_table(table_name, options = {})
  td = create_table_definition table_name, options[:temporary], options[:options]

  # blah blah

  # YOUR BLOCK
  td.string :name
  td.text :description

  td.timestamps
  # END BLOCK

  # blah blah
end

它是一个块,这是Ruby语言的一个特性。它们基本上是lambdas,不是lambdas<代码>lambda
s是lambda。这与
Proc
不同,后者是块的实例:
defx(&b);b、 阶级;结束;x{}#=>Proc
def create_table(table_name, options = {})
  td = create_table_definition table_name, options[:temporary], options[:options]

  # blah blah

  yield td if block_given?

  # blah blah
end
def create_table(table_name, options = {})
  td = create_table_definition table_name, options[:temporary], options[:options]

  # blah blah

  # YOUR BLOCK
  td.string :name
  td.text :description

  td.timestamps
  # END BLOCK

  # blah blah
end