2013-02-28 39 views
2

例如絕對標誌在Ruby中意味着什麼?

func(@param) do |f| 
    some code here 
end 

@param.each do |sth| 
    some code here 
end 

什麼是絕對值符號在這裏做?我不明白這兩段代碼。

+1

這只是引入塊參數的語法(類似於括號在適當位置引入方法參數的方式)。搜索「紅寶石塊教程」。 – 2013-02-28 01:11:54

+0

我不明白這個問題是如何過於本地化的,當它與其他所有的「Ruby中的......意味着什麼」問題一樣的時候。 – DGM 2013-03-02 04:35:59

回答

4

這是塊中的局部變量,讓線路:

@param.each do |sth| 

你遍歷@param權,以及在@param每個項目被稱爲單獨爲sth

所以如果@param是指含有一個陣列的數字

[1,3,5,4] 

在第一次迭代sth1,然後3,然後5,然後4

也是一樣的:

func(@param) do |f| 

除了現在局部變量稱爲f!你可以稱它爲任何你想要的,甚至|ihavenoideawhatimdoing|

+0

如果基金的返回值(@param)不是一組值而只是一個單值?它仍然有效嗎? – OneZero 2013-02-28 01:17:06

+0

是的,它只會迭代一次變量。對於n個值的列表,它將迭代n次,其中每個值爲' – siame 2013-02-28 01:17:45

2

這是一個局部變量,它表示對於do ... end之間的代碼塊,定義了變量f

+0

那它怎麼知道f和是什麼?我還沒有給他們分配任何價值。 – OneZero 2013-02-28 01:09:35

+0

@ user1229490您正在調用的方法爲您提供了該值,您只是給它一個名稱。在Ruby中稱爲塊 – 2013-02-28 01:11:41

+0

因此,前一個函數的返回值分配給| f |。是對的嗎? – OneZero 2013-02-28 01:14:28

0

它表示實例變量。你經常看到它,如果人們使用attr_互換*方法,如attr_accessor,這使得@someattrself.some_attr相當於實例方法。

+1

它不表示實例變量,並且與'attr *':'@ isAnInstanceVariable'無關。 – 2013-02-28 01:13:54

2

它是一個塊的參數。該塊是do和end之間的代碼的一部分。該代碼塊可以使用fsth,在您的示例中該代碼塊可能已由funceach設置。

A tutorial on Ruby blocks可能會有所幫助。

Labmda calculus - 更抽象,但它是我第一次看到這些東西的上下文。

+0

我不會引入lambda微積分..但是,這個答案確實說明了它是什麼(或者說,它引入了什麼)..還有更好的可用塊的教程。 – 2013-02-28 01:17:37

+0

是的,lambda微積分超過了頂端,而不是一個很好的比較,因爲與lambda表達式不同,塊可以有多個參數。更好的條款將是匿名函數或一流的函數。 – windywindy 2013-02-28 01:26:18