lambda
被稱爲lambda而proc
被稱爲proc的原因是什麼?
公平我記得這兩個都是匿名函數......這就是與Lambdas相似之處的結局。他們沒有從Haskell那裏獲得像lambda一樣的一個參數。Lambda和proc的名字
爲什麼一個被稱爲lambda的地方都可以被稱爲lambda?
爲什麼有人用名稱「proc」命名一個,「lambda」命名爲第二個?
ps。他們都在一個班級,Proc
。有方法lambda?
,顯示它是否爲lambda。
lambda
被稱爲lambda而proc
被稱爲proc的原因是什麼?
公平我記得這兩個都是匿名函數......這就是與Lambdas相似之處的結局。他們沒有從Haskell那裏獲得像lambda一樣的一個參數。Lambda和proc的名字
爲什麼一個被稱爲lambda的地方都可以被稱爲lambda?
爲什麼有人用名稱「proc」命名一個,「lambda」命名爲第二個?
ps。他們都在一個班級,Proc
。有方法lambda?
,顯示它是否爲lambda。
在ruby中,lambda是一種特殊的Proc對象,其行爲模仿一種方法。特別是,它會尊重arity:如果你給它錯誤的參數數量,它會吐出一個錯誤。
爲它們的區別五顏六色的例子看到這個答案(對無關的問題):
Why does Hash#select and Hash#reject pass a key to a unary block?
回覆評論:蘭巴和PROC兩個產品一個Proc對象。唯一的區別是上面提到的arity的行爲,以及return語句會發生什麼(請參閱問題評論中的相關鏈接)。
至於他們爲什麼這樣命名,看起來沒有比Matz的選擇imo更進一步:這是最自然的。他在採訪中定義了他的意思:
每個人都有自己的背景。有人可能來自Python,其他人可能來自Perl,他們可能會對該語言的不同方面感到驚訝。然後他們走到我面前說:'我對這種語言的這種特徵感到驚訝,所以Ruby違反了最不讓人驚訝的原則。「等待。等待。最小驚喜的原則並不僅限於你。最少突擊的原則意味着最少的原則我的的驚喜。這意味着在你學習Ruby很好之後,最不感到驚訝的原則。例如,在我開始設計Ruby之前,我是一名C++程序員。我用C++專門編程了兩三年。經過兩年的C++編程,我仍然感到驚訝。
http://en.wikipedia.org/wiki/Ruby_(programming_language)#Philosophy
有鑑於此,注意拉姆達的行爲非常像的方法,並在這方面有資格作爲(匿名)功能。而proc沒有。命名這些「lambda」中的第一個似乎是一個自然的選擇(無論如何,對我來說),而第二個並不是由於關於arity和return語句的區別。
它並不能解釋爲什麼lambda是lambda,爲什麼proc是proc等。 –
@DarekNędza:see edit。 –
不相信那個引用證明了任何東西,超出了Humpty Dumpty的理由:「當我使用一個詞時,它意味着我選擇它的意思 - 既不多也不少。」 –
lambda被稱爲lambda而proc被稱爲proc的原因是什麼?
讓我們看到呼叫發生了什麼事proc
,並在紅寶石1.8 lambda
。7:
aa = lambda {|a| nil }
# => #<Proc:[email protected](irb):6>
aa.call
# warning: multiple values for a block parameter (0 for 1)
# => nil
aa = proc {|a| nil }
# => #<Proc:[email protected](irb):10>
aa.call
# warning: multiple values for a block parameter (0 for 1)
正如我們可以看到,有proc
,並lambda
在Ruby中沒有什麼區別。我認爲proc
起初出現在Ruby
。因爲它只是Proc.new
的別名,它創建了Proc
對象。然後lambda
已經添加到ruby,因爲Lambda是計算機編程領域中所謂的匿名函數,並且開發人員可以在語言中看到該函數類的熟知名稱。
讓我們看到,隨着運營商在1.9.1發生了:
aa = lambda {|a| nil }
# => #<Proc:[email protected](irb):1 (lambda)>
aa.call
# ArgumentError: wrong number of arguments (0 for 1)
from (irb):2:in `call'
from (irb):2
from /home/malo/.rvm/rubies/ruby-1.9.1-p431/bin/irb:12:in `<main>'
aa = proc {|a| nil }
# => #<Proc:[email protected](irb):3>
aa.call
# => nil
我們可以看到,在紅寶石1.9.2(我猜的,因爲紅寶石1.9)加屬性lambda into Proc
實例說anonymouns函數不會接受錯誤的參數量。因此,將參數傳遞給需要引起ArgumentError
例外。雖然proc
對象所需的自變量通過靜靜地丟棄不必要的參數。
當你從1.9.1加入->
作爲別名argumentless lambda
操作者知道:
aa = -> { nil }
# => #<Proc:[email protected](irb):1 (lambda)>
aa = -> {|a| nil }
# SyntaxError: (irb):2: syntax error, unexpected '|'
aa = -> {|a| nil }
^
@ Darek-Nedza有沒有幫助? –
我一直在問同樣的各種問題在我採訪的一個,但我不能」 t答案。今天我會從那裏學習它。感謝把它帶到這裏。 :) +1 –
重複? http://stackoverflow.com/questions/7043181/ruby-lambda-vs-proc-new –
@TonyHopkinson不,它不是...我認爲,至少你提到的那個.. –