理解Ruby(Sinatra) - 非常非常基础

时间:2012-10-08 17:18:36

标签: ruby rubygems sinatra

我在看Sinatra并试图理解语法:

require 'sinatra'

get '/' do
  "Hello, World!"
end

我明白这样做:

  

这是一条“路线”。在这里,我们告诉Sinatra,如果使用普通的GET HTTP方法请求home或root,URL'/',则显示“Hello,World!”

但是Ruby语言发生了什么?

  1. 这种语法是什么意思:get '/'get是一种方法,“/”是一个参数吗?如果是方法,那么在Ruby中,我可以将方法称为methodname (parameter) {}。什么是{ }
  2. 我通常将doend理解为{ },它们是函数体的一种附件。
  3. doend之间我们有“Hello,World!”这是一个声明吗?我的意思是,它正在打印,但我们没有将其称为print "Hello, World!",所以发生了什么?
  4. 似乎get是Sinatra中定义的方法,但是如果我添加了一个gem,那里已经定义了get方法,那么我怎么知道它会调用哪个'get'方法?或者,它是指HTTP get方法吗?
  5. 如果这个问题听起来很基本,我很抱歉,但我希望在继续前进之前完成它。

2 个答案:

答案 0 :(得分:1)

我可以建议在处理像sinatra这样一个相当专业的库这样的大问题之前,先阅读一篇关于ruby的教程。

一个好的起点是Ruby Koans

关于你的问题。

  1. get是一种方法。 '/'是它的论点。并且do ... end表示像{}那样的红宝石块。
  2. 是的do ... end
  3. Ruby中的块返回默认计算的最后一个值,因此在具有字符串的情况下与return "String"相同。
  4. 如果您遇到名称空间冲突,Ruby会抱怨。在这种情况下,getsinatra定义的方法get。抽象地,它代表针对服务器的HTTP GET请求。

答案 1 :(得分:0)

对于“完美”的回应,我建议你看一下“Sinatra Up and Running”这本书 Alan Harris和Konstantin Haase。

http://shop.oreilly.com/product/0636920019664.do

第6页和第7页解释了“get'/'do”行实际上是一种方法调用。

您可以使用Google预览查看这2页。