Fra*_*nk 4 ruby codeblocks local-variables
例如,在Rails gemfile中:
group :development, :test do
gem 'rspec-rails', '~> 2.0'
end
Run Code Online (Sandbox Code Playgroud)
正在发生的事情与do... end语句?并与rspec:
describe "Foo" do
context "bar" do
expect...
end
end
Run Code Online (Sandbox Code Playgroud)
是do... end-s创建一个块,其间的信息正在其他地方使用?如果没有设置块参数,它如何工作?
这称为域特定语言
域特定语言或DSL是"专注于特定域的有限表现力的编程语言".通过删除特定任务的无关代码并允许您专注于手头的特定任务,它可以使其域中的任务更容易.它还可以帮助其他人阅读代码,因为代码的目的是如此清晰.
基本上这个
group :development, :test do
gem 'rspec-rails', '~> 2.0'
end
Run Code Online (Sandbox Code Playgroud)
只是调用group带有参数:development, :test和块的方法gem 'rspec-rails', '~> 2.0'.在Bundler DSL中以这种方式定义:
def group(*args, &blk)
...
end
Run Code Online (Sandbox Code Playgroud)
第二个例子也是如此.
DSL定义了对示例进行分组的方法,最明显的是描述,并将它们公开为RSpec的类方法.
def describe(doc_string, *metadata_keys, metadata = {}, &example_implementation)
...
end
Run Code Online (Sandbox Code Playgroud)
您可以在这篇thinkbot.com文章中阅读有关在Ruby 中编写特定于域的语言的更多信息