2012-10-08 52 views
1

我看着西納特拉,並試圖瞭解語法:瞭解紅寶石(屈) - 非常非常基本的

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之間我們有「你好,世界!」這是一個聲明?我的意思是,它正在印刷,但我們沒有把它叫做print "Hello, World!",所以發生了什麼?
  4. 看來get是Sinatra中定義的一種方法,但如果我添加了一個gem,那裏已經定義了一個get方法,那麼我怎麼知道它會調用哪個'get'方法?或者,它是指HTTP get方法?

如果這個問題聽起來很基本,我很抱歉,但我想在我向前邁進之前通過它。

回答

1

我可以建議在解決像sinatra這樣一個相當專業化的庫這個大問題之前,閱讀關於ruby的教程。

一個良好的開端是與Ruby Koans

至於你的問題。

  1. get是一種方法。其論據是'/'。和do ... end表示紅寶石塊,就像{}一樣。
  2. 是啊,這是什麼do ... end
  3. 塊在Ruby中恢復默認最後一個計算值,因此在由具有字符串的情況是一樣的有return "String"
  4. 如果您遇到名稱空間衝突,Ruby會發出抱怨。在這種情況下,getsinatra定義的方法get。抽象地說,它代表針對服務器的HTTP GET請求。
+0

謝謝。我已經閱讀了教程,但沒有看到如此詳細的語法解釋。我確信,在一段時間內,經驗,我會很容易地抓住他們。通常在大多數語言中,方法調用看起來像methodname(paramaters)。但是在這裏methodname(參數)然後{}。這讓我失去了。它調用get方法,在其中傳遞參數「/」,並附加一個返回「hello world」的塊。那麼在這個方法被定義的地方,這個塊如何被使用?方法調用只是methodmname和參數,不是嗎? – JVK

+2

@JVK,使用'{'和'}'來定義某些東西在語言中是很常見的,你只是沒有用C,C++或Perl編寫,命名爲3,你會看到大括號。我們稱之爲「{」和「}」或「做」/「結束」塊內的內容。 –

+2

@JVK塊是來自方法調用的參數之一(總是最後一個參數)。它在方法yield時被調用。 – steenslag

0

對於「完美」的迴應,我建議你看看「Sinatra Up and Running」作者: Alan Harris和Konstantin Haase。

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

頁6和7解釋瞭如何爲 「get '/' 做」,其實是一個方法調用。

而且您可以使用Google預覽查看這2頁。