2011-10-29 207 views
2

我對Ruby很新,所以請耐心等待。如何正確使用塊?

爲什麼它是一個語法錯誤有「測試」{| s |打印s}?如何「測試」做| s |打印結束?

謝謝

+0

爲了將來的參考,通常包含給出的錯誤信息是一個好主意。 –

回答

6

你不能這樣說:

"test" { |s| print s } 

因爲"test"是一個字符串,而不是一個方法。這同樣適用於您的do/end版本。你可以說:

["test"].each { |s| print s } 

雖然因爲數組是可枚舉和可數有each方法。

+0

男人,似乎我誤讀:) +1爲你;) – apneadiving

3

{}通常用於一個襯裏。

do/end for multiple lines。

但沒有規則,做你喜歡的。

注意:

要是你需要傳遞的一個襯墊幾個指令,他們有獨立的;

+0

保留我的答案,對初學者仍然有用。 – apneadiving

0

塊只是大括號或關鍵字do/end中包含的一段代碼。如前所述,您通常對一個襯墊使用大括號,並對多行代碼執行/結束。塊只能在調用某個方法後立即出現。您可以將塊視爲匿名方法(沒有方法名的方法)。

在你的代碼中,你是在一個字符串之後立即放置一個塊,而不是方法調用。塊可用於循環,因爲這樣的:

2.times { puts "hello" } # => 2 
# >> hello 
# >> hello 

在上面的代碼中,時間是屬於所有整數(即,它是整數類的實例方法)的方法。 times方法執行塊中的代碼兩次,並返回您調用它的對象(本例中爲2)。您可以將塊傳遞給任何方法,但不期望它們的方法將忽略該塊。

塊可以帶參數。參數放置在管道('|'字符)之間。事實證明,第一個例子中可以接受的參數如下所示:

2.times { |i| puts i.to_s + " hello" } # => 2 
# >> 0 hello 
# >> 1 hello 

我只是剛剛觸及塊的電源的表面。您可以在線版Programming Ruby: The Pragmatic Programmer's Guide(aka PickAx Book)免費閱讀更多關於積木的信息。這是一個現在的幾個版本,但對於Ruby的介紹,你應該發現它已經足夠了。一旦你理解了塊,你可以開始使用包含在數組和哈希中的Enumerable的強大功能。