Sinatra 如何允许其语法?
How does Sinatra allow its syntax?
Sinatra 的一个例子是这样的:
require 'sinatra/base'
class MyApp < Sinatra::Base
set :sessions, true
set :foo, 'bar'
get '/' do
'Hello world!'
end
end
Sinatra 如何允许“get '/' do”语法?它似乎不是一种方法,而且我不知道任何其他允许这样做的语法。
get '/'
正在为您的应用程序指定 GET 端点。如果您要启动服务器并转到 localhost:port/,那么您会在页面上看到 'Hello world!'。
def get(path, opts = {}, &block)
conditions = @conditions.dup
route('GET', path, opts, &block)
@conditions = conditions
route('HEAD', path, opts, &block)
end
这是Sinatra库中的get方法。 get 方法将路径作为参数并将您引导至该路径。您还可以传递选项 (opts),但您的示例中并未这样做。最后一个参数是一个块。这是做和结束之间的部分。
这在 Ruby 中称为 "Internal Domain-Specific Language"。 get
你调用的实际上是一个由 Sinatra 定义的方法,它需要一个块(这是你对 get 的实现)。
当您发现自己调用了看起来很奇怪的方法,但仍然能够执行看似正常的 Ruby 代码时,您可能正在使用内部 DSL。示例包括 Bundler 的 Gemfiles、Rake 的 Rakefiles、RSpec 规范...
Sinatra 的一个例子是这样的:
require 'sinatra/base'
class MyApp < Sinatra::Base
set :sessions, true
set :foo, 'bar'
get '/' do
'Hello world!'
end
end
Sinatra 如何允许“get '/' do”语法?它似乎不是一种方法,而且我不知道任何其他允许这样做的语法。
get '/'
正在为您的应用程序指定 GET 端点。如果您要启动服务器并转到 localhost:port/,那么您会在页面上看到 'Hello world!'。
def get(path, opts = {}, &block)
conditions = @conditions.dup
route('GET', path, opts, &block)
@conditions = conditions
route('HEAD', path, opts, &block)
end
这是Sinatra库中的get方法。 get 方法将路径作为参数并将您引导至该路径。您还可以传递选项 (opts),但您的示例中并未这样做。最后一个参数是一个块。这是做和结束之间的部分。
这在 Ruby 中称为 "Internal Domain-Specific Language"。 get
你调用的实际上是一个由 Sinatra 定义的方法,它需要一个块(这是你对 get 的实现)。
当您发现自己调用了看起来很奇怪的方法,但仍然能够执行看似正常的 Ruby 代码时,您可能正在使用内部 DSL。示例包括 Bundler 的 Gemfiles、Rake 的 Rakefiles、RSpec 规范...