>>228
>Rubyのブロックはラムダじゃないしファーストクラスでもないよね?
Python や JavaScript のクロージャは、(名前が宣言された)関数と同様に
クロージャへ引数を渡すだけで評価される
closure = function(x) { return x + 1 } # クロージャを生成して名前に束縛
succ_of_one = closure(1) # クロージャを評価
それに対して Ruby だと、メソッド Proc#call を呼ばなければ評価されない
block = lambda { |x| x + 1 } # ブロックを生成して名前に束縛
succ_of_1 = block.call(1) # ブロックを評価
従って >>4(>>199) の関数型言語におけるクロージャ定義に当てはめれば
「Ruby のブロックは(本物の)クロージャではない」あるいは「....はクロージャもどきである」
またRuby のブロックの意味はオブジェクト(Procクラスのインスタンス)だからファーストクラスである
>メソッドにラムダを渡すこともできるけど、不格好なんだが?
たしかに不格好だ
def foo(x, y, &block); .... ; end # メソッドを定義
foo(x, y, lambda { |z| .... }) # メソッドの呼び出し
だから Ruby には「ブロック付きメソッド呼び出し」という構文糖が最初から用意されている
def foo(x, y); .... ; end # メソッドを定義
foo(x, y) { |z| .... } # メソッドの呼び出し
>Pythonの仕様をあげつらうためだけにオレオレ定義をこねくって
>>4 のクロージャ定義の引用元(ソース)は >>199 で示したが、まともな反論はない
むしろオレオレ定義と騒ぎ立てていた連中がSICP本を読んだ事もないお馬鹿達だったのでは?
あるいはSICP本を読んでいなくても、関数型言語の操作的意味論や処理系実装の知識があれば
>>4 がオレオレ定義でないことは直ぐに理解できていたはず
クロージャって何がいいの? [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
237デフォルトの名無しさん
2014/12/14(日) 20:48:34.17ID:lkA9lgpO■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 中国国営メディア「沖縄は日本ではない」…★7 [BFU★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 高市早苗、岸田政権(当時)に「台湾有事は日本の有事か」という質問をしていた [175344491]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- ケンタッキーの○○○バーガーという予告がアレを想起すると話題に [523957489]
- んなっしょい🍬禁止🈲のお🏡
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
