4
顯然,Ruby可以讓一個代碼塊用一個符號返回一個實例變量的值。試想一下:使用符號來訪問實例變量?
class Person
attr_accessor :fn
end
def give(n,&b)
i=0
while(i<n)
aa = Person.new
aa.fn = "name #{i}"
i=i+1
puts b.call(aa)
end
end
現在,無論是give(5, &:fn)
和give(5) {|x| x.fn}
給
name 0
name 1
name 2
name 3
name 4
=> nil
但什麼是&:fn
究竟意味着什麼?我知道這個符號可以一個Proc轉換成塊如
bb = Proc.new {|x| x.fn}
give(5, &bb)
那麼,是什麼符號:fn
是什麼意思?我在哪裏可以看到像這樣的使用文檔?我們可以使用符號來訪問實例變量,如說person:new
或person[:new]
?
'person [:new]'將用於訪問散列,其中密鑰是符號 – 2012-07-17 19:32:57
@KassymDorsel,謝謝。我知道散列的情況,但在這裏它是一個類的對象,'&:fn'中的符號訪問實例變量。 – highBandWidth 2012-07-17 19:37:34
&符號將實際上將對象轉換爲'Proc',而':fn'則表示符號,'&:fn'等價於'&(:fn.to_proc)' – 2012-07-17 19:37:39