理解Ruby和Sinatra语法
我需要破译一些Ruby代码。作为一名Python开发人员,我很难理解一些语法 我需要处理一些(大部分是干净易读的)Sinatra代码。我从a开始,它看起来像这样:理解Ruby和Sinatra语法,ruby,sinatra,Ruby,Sinatra,我需要破译一些Ruby代码。作为一名Python开发人员,我很难理解一些语法 我需要处理一些(大部分是干净易读的)Sinatra代码。我从a开始,它看起来像这样: get '/' do "Hello, World!" end get('/', lambda { "Hello, World" }) 现在,我知道在Ruby中调用函数不需要括号。因此,如果我试图理解上述内容,我会说: get是一个函数,它的第一个参数是route “/”是第一个参数 做。。。end块是一个匿名函数 请纠正我
get '/' do
"Hello, World!"
end
get('/', lambda { "Hello, World" })
现在,我知道在Ruby中调用函数不需要括号。因此,如果我试图理解上述内容,我会说:
get
是一个函数,它的第一个参数是route“/”
是第一个参数做。。。end
块是一个匿名函数{…}
)是一个块,在Ruby中是一个非常重要的概念。需要注意的是,通常采用其他函数作为参数的函数(map
,filter
,grep
,timeout
…)通常只接受一个函数。所以Ruby设计师决定为它制作一种特殊的语法
人们常说,在Ruby中,一切都是对象。这并不完全正确:代码不是对象。代码可以包装到对象中。但是Ruby块是纯代码——不是对象,根本不是一阶值。块是与函数调用关联的一段代码
您的代码段与此等效:
self.get('/') do
return "Hello, World!"
end
get
方法采用一个参数和一个块;不是两个参数。在一个假设的例子中,get
使用了两个参数,我们必须这样写:
get '/' do
"Hello, World!"
end
get('/', lambda { "Hello, World" })
或
但是请注意,我们将代码包装到对象中的方法包括调用方法lambda
和Proc.new
——并给它们一个块(和零参数)
有很多关于“Ruby块”的教程,所以我不会链接任何特定的教程
由于块语法,Ruby非常擅长用方言(仍然是完全语法化的Ruby)非常简洁地表达某些概念。Sinatra使用get…
“语法”(但实际上只是一个方法调用)来描述web服务器;Rake使用任务…
语法来描述构建过程RSpec是一个测试框架,它有自己的DSL(仍然是Ruby)来描述所需的行为。。。end
(或{…}
)是一个块,在Ruby中是一个非常重要的概念。需要注意的是,通常采用其他函数作为参数的函数(map
,filter
,grep
,timeout
…)通常只接受一个函数。所以Ruby设计师决定为它制作一种特殊的语法
人们常说,在Ruby中,一切都是对象。这并不完全正确:代码不是对象。代码可以包装到对象中。但是Ruby块是纯代码——不是对象,根本不是一阶值。块是与函数调用关联的一段代码
您的代码段与此等效:
self.get('/') do
return "Hello, World!"
end
get
方法采用一个参数和一个块;不是两个参数。在一个假设的例子中,get
使用了两个参数,我们必须这样写:
get '/' do
"Hello, World!"
end
get('/', lambda { "Hello, World" })
或
但是请注意,我们将代码包装到对象中的方法包括调用方法lambda
和Proc.new
——并给它们一个块(和零参数)
有很多关于“Ruby块”的教程,所以我不会链接任何特定的教程
由于块语法,Ruby非常擅长用方言(仍然是完全语法化的Ruby)非常简洁地表达某些概念。Sinatra使用
get…
“语法”(但实际上只是一个方法调用)来描述web服务器;Rake使用任务…
语法来描述构建过程RSpec
是一个测试框架,它有自己的DSL(仍然是Ruby)来描述所需的行为。读了一些书后,我理解了代码块
Ruby代码块很简单。它们是“闭包”。有两种方法可以编写块
do |x|
do_something(x)
end
{|x| do_something(x) }
|x |
是传递给块内代码的参数
掌握代码块的关键在于理解它们是如何与方法一起使用的
在Ruby中,方法有点不同
- 除了参数,任何方法都可以接受代码块。
- 代码块不是参数,但它们是一个单独的实体,可以与参数一起传递给方法
- 方法可以选择不调用代码块,在这种情况下,将忽略传递的任何代码块
- 如果一个方法调用一个代码块,那么在调用该方法时必须传递它,否则Ruby会抱怨
在方法中执行代码块yield
有关代码块的更多信息,请阅读以下内容:经过一些阅读,我理解了代码块 Ruby代码块很简单。它们是“闭包”。有两种方法可以编写块
do |x|
do_something(x)
end
{|x| do_something(x) }
|x |
是传递给块内代码的参数
掌握代码块的关键在于理解它们是如何与方法一起使用的
在Ruby中,方法有点不同
- 除了参数,任何方法都可以接受代码块。
- 代码块不是参数,但它们是一个单独的实体,可以与参数一起传递给方法
- 方法可以选择不调用代码块,在这种情况下,将忽略传递的任何代码块
- 如果一个方法调用一个代码块,那么在调用该方法时必须传递它,否则Ruby会抱怨
在方法中执行代码块yield