我看到如下所示的红宝石代码。这似乎是创建配置或设置的一种习惯用语,但我并不真正了解它。此外,该代码的Application.configure
部分将如何查看?这个红宝石代码如何工作设置配置
MyApp::Application.configure do
config.something = foo
config.....
config....
.
config....
end
我看到如下所示的红宝石代码。这似乎是创建配置或设置的一种习惯用语,但我并不真正了解它。此外,该代码的Application.configure
部分将如何查看?这个红宝石代码如何工作设置配置
MyApp::Application.configure do
config.something = foo
config.....
config....
.
config....
end
首先,该配置方式不是特定于Ruby的;它是选择使用它的应用程序(或库,宝石)。
解释你又有什么代码做的,我相信你的代码片段为例:
MyApp::Application.configure do
config.something = foo
end
在这里,你在呼唤MyApp::Application.configure
方法,不带参数。通话结束后,您可以给它区块。
您可以将块想象为您可以使用的一段代码。
他们可以在一个单行或多个这样写:
{ puts 'hello' }
{ |param| puts param } # with passing it a param
# or
do |param|
puts param
end
(?记得my_array.each do ... end
这是你传递一个块;))
现在,该块将在configure
方法由于内部调用到yield
。
yield
使用(或执行)已传递给方法的块的指令。
例子:让我们定义的方法与它内部的产率:
def hello
puts "Hello #{yield}"
end
如果调用此方法,你会得到一个'hello': no block given (yield) (LocalJumpError)'
。
您需要通过一个块:hello { :Samy }
。
结果将是Hello Samy
。正如你所看到的,它只是使用传递给该方法的块中的内容。
这正是Rails配置代码中发生的情况。您只需将config.something
(config
是一种方法)设置为某个值,并且相同的config.something = foo
在configure
内执行。
您可以了解更多关于yield
和块here,并在此great book。
的部分从“做”直到“结束”被称为块,并且获得通过向configure
类方法上Application
。 (所有的ruby方法都可以接受参数和块)
所以Application.configure
方法是用一组默认值创建一个配置对象,然后调用该块。然后该块设置您看到的值,具有覆盖它们的效果。
然后将该配置对象设置为类变量(如全局变量),以便其他类可以稍后在应用程序生命周期中使用该配置对象。
希望简化说明有帮助!
你知道你可以看看来源,对吗? :) –
是的,但是对于像我这样的初学者来说,rails的源代码并不是一件容易的事情。我也不确定这是实际的工作代码还是我看到的样本。 – Brand
我没有使用过Rails,所以我不能肯定地说,但它可能在'instance_eval'的范围内执行,它定义了一个名为'config'的变量。 – Linuxios