Rubyのlambda,proc関数の使い方が良く分かりません。>Rubyのlambda,proc関数の使い方が良く分かりません。524もっと見る100ptインターネットウェブ制作Rubyのlambda,proc関数の使い方が良く分かりません。「こういうときに使うと便利」という例があれば教えてください。有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。20:33:2220pt手前味噌を一つ。Haskellは難しくない--こともある。http://blog.livedoor.jp/dankogai/archives/50538384.htmlDan.the.Occasional.Rubyistありがとうございます。Xが引数1つづつの関数で表されているのは分かったのですが、引数を1つの関数にするとどういうメリットがあるのかまだ良く分かっていません。使うと、ある種の手続きをオブジェクトにすることができて、引数などとして渡すことができるようになります。ように処理するということができるようになります。ありがとうございます。CやC++ではその概念がない(コールバック関数とか、関数ポインタはありますが)ので、どのような時に使うと便利なのか分からず質問してみました。x};a[1])使う場面というのが中々想像できないです。lispとかやられてた方には自明なのでしょうか?後、lambda関数とλ計算は同じものなのでしょうか?http://d.hatena.ne.jp/keyword/%a6%cb%b7%d7%bb%bb上記に書いてあるλを使った式はlambdaでも書けるのでしょうか?Rubyはオブジェクト指向言語ですが、関数言語の機能も含んでいるのでしょうか。12:13:3520ptファイナライザを定義するときに使います。http://www.ruby-lang.org/ja/man/?cmd=view;name=ObjectSpaceありがとうございます。デストラクタに「やること」を引数で渡すわけですね。ように定義するのかと思っていました。19:07:2520pthttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?ClosureRubyのブロックは、関数内部で暗黙にProcオブジェクトに変換されています。ブロックはlambda,procのシンタックスシュガーと考えればよいでしょう。ブロックが使えていれば、lambdaを使いこなせているのです。Fowlerも明示的にlambdaを使うことは少ないと書いています。ブロックは末尾引数に&を付ければ受け取ることができ、その値はProcオブジェクトになります。変数に記憶しておけば、同じ動作を繰り返し使えるようになります。コードをブロックで渡すだけで済むなら、ブロックでよいのです。コードをブロック形式で渡せない状況であればlambdaを明示的に使うことになるでしょう。名前付き引数でコードブロックを指定する時とかが思いつきます。http://api.rubyonrails.org/classes/ActiveRecord/Validations/Clas...たまたま開いていた上のActiveRecordのvalidationでもlambdaを使ってますね。利用者側が外部からlambdaで指定するわけです。http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B...もしlambdaを使いこなしたいのであれば、引数で受け渡せることに加えてレキシカルクロージャという概念も知っておいた方がよいでしょう。上のWikipeadiaのJavaScriptカウンタをrubyで書いてみるとこんな感じ。c.call}詳しく説明頂きありがとうございます。>つまりブロックが使えていれば、lambdaを使いこなせているのです。procが使えれば大体使いこなせていてさらに細かな動作をさせたいときにlambdaを使うというイメージでしょうか。lambdaがλ関数であればチューリングマシンと同値。lambda関数さえあれば全てのプログラムが記述可能なわけでしょうか。mixiの某トピで「yieldとblock.callどっちを使いますか」というのがあってblock.callが良く分からなかったのですが、説明を見て分かったような気がします。C/C++/Java/C#などには「クロージャー」の概念がないので凄く興味があります。以前、以下の質問でRubyを薦めたのですが、質問者の方はPHPを選ばれたので残念に思ったことがあります。Rubyには他の言語にない先進的(逆にLispから受け継いだのでいにしえの術かも)な機能があるのでそれを説明したかったのですが、言葉で表せなかったのが残念です。Rubyを使っているだけで色々勉強になります。02:12:0320pt>procが使えれば大体使いこなせていて>さらに細かな動作をさせたいときに>lambdaを使うというイメージでしょうか。(微妙な違いはありますが)それらを直接使うことはあまり必要ないでしょう。ほとんどの場合、より高度な構文であるブロックだけで済んでしまうのです。「変数に代入できない」という制約があり、それを超えてコードの受け渡しをしたいときにはlambdaを明示的に使わないとできません。>lambdaがλ関数であればチューリングマシンと同値。>つまりlambda関数さえあれば全てのプログラムが記述可能なわけでしょうか。ラムダ関数は単なる語源ぐらいに考えた方が現実的だと思います。Rubyのlambdaは単純にコードをオブジェクト化しているだけです。回り道かもしれませんが、LispかSchemeを学んだらいいのでは?http://practical-scheme.net/gauche/index-j.htmlありがとうございます。>ブロックには「関数に1つしか受け渡せない」>「変数に代入できない」という制約があり、>それを超えてコードの受け渡しをしたいときには>lambdaを明示的に使わないとできません。