Ruby “这红宝石是怎么做的?”;方法“;工作
我正在使用Ruby,但我对Ruby完全陌生,并且对下面的代码实际上在做什么感到困惑Ruby “这红宝石是怎么做的?”;方法“;工作,ruby,class,object,methods,sinatra,Ruby,Class,Object,Methods,Sinatra,我正在使用Ruby,但我对Ruby完全陌生,并且对下面的代码实际上在做什么感到困惑 class Something < Sinatra::Base get '/' do 'hello world' end end class某物
class Something < Sinatra::Base
get '/' do
'hello world'
end
end
class某物
我们似乎没有定义一种方法。我们正在调用get
方法吗?如果是的话,什么时候叫?我在其他语言中没有见过这样的东西
如果我们有两个扩展了Sinatra::Base的类,那么Sinatra如何理解
get
应用于Something
而不是另一个类 与Java函数相反,当您在Ruby中定义类时,Ruby实际上是在执行代码。有点像Java的静态块。所以当你这样做的时候
class Foo
puts(self)
end
您将打开一个类(即将当前的self
更改为Foo
),在其上下文中执行put
(这将打印出Foo
类对象),然后关闭该类(将self
返回到以前的状态)
get
是在Sinatra::Base
上定义的方法。因此,您的代码实际上被解释为
class Something < Sinatra::Base
self.get('/') do
'hello world'
end
end
Sinatra运行时只是一个循环,当GET请求传入时,它会根据GET上的THINGS\u TO\u DO\u查找URL,并执行在那里找到的内容
class Sinatra::Base
WHAT_TO_DO_ON_GET = {}
def self.get(url, &thing_to_do)
WHAT_TO_DO_ON_GET[url] = thing_to_do
end
end