我有幾個關於Ruby的方法,過程和塊的問題讓我覺得很奇怪。它們與語法或功能沒有太大關係,而是作爲決策背後的邏輯。Ruby方法,Proc和塊混淆
問題1:
爲什麼該塊可以被傳遞到方法(例如每個),但它們不能被分配給一個變量?
我知道你可以在程序中傳遞它們,即p = Proc.new {...}
(使用&p
訪問),但是讓程序員通過這些方法是沒有什麼意義的。
問題2:
爲什麼有方法和程序之間的區別?
舉例來說,我可以完成以下兩種方式定義一個函數,並調用該函數的任務:
def square(x)
x**2
end
square(3)
=> 9
或
square = lambda {|x| x**2}
square.call(3)
=> 9
爲什麼分化?例如在Python中,以標準方式定義一個函數,並由square = lambda x: x**2
完成創建函數並將其分配給square
的相同任務。
紅寶石聲稱一切都是對象。塊應該是對象,以便與之匹配,並且它們可以作爲參數傳遞,所以它們在某些方面明確地扮演着對象的角色。 – rpjohnst 2009-08-07 17:58:18
可以通過創建一個對象來表示塊,proc或lambda,使塊可以像對象一樣工作。沒有這個設備,它們只是語法結構。 – Pinochle 2009-08-07 18:03:33
有塊對象 - 這就是lambda {whatever}的目的。 – Chuck 2009-08-07 18:04:16