問題タブ [proc-object]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Rubyでラムダ(Proc)をマーシャリングするにはどうすればよいですか?
Joe Van Dykは Ruby メーリング リストに次のように質問しました。
やあ、
Ruby では、lambda/proc オブジェクトをマーシャリングできないと思いますよね? Lispや他の言語でそれは可能ですか?
私がやろうとしていたこと:
そのため、何をすべきかのコンテキスト/コードを含むラムダ オブジェクトを BackgroundJob に送信しています。しかし、それは不可能だったと思います。プログラムの実行後に何をすべきかの指示を含む通常の Ruby オブジェクトをマーシャリングすることになりました。
ジョー
ruby - Rubyコードをどのようにストリング化/シリアライズしますか?
Ruby コードにラムダ/Proc を記述し、それをシリアル化してディスクに書き込み、後でラムダを実行できるようにしたいと考えています。みたいな...
後で、Ruby インタープリターの別の実行で、私は言うことができるようにしたい.
Marshal.dump は Procs では機能しません。Perl にData::Dump::Streamerがあることは知っていますが、Lisp ではこれは些細なことです。しかし、Rubyでそれを行う方法はありますか? 言い換えれば、の実装は何でしょうか?save
_
for_
later
編集:以下の私の答えはいいですが、自由変数( など)を閉じずx
、ラムダとともにそれらをシリアル化します。だから私の例では...
... 文字列出力に の定義が含まれていませんx
。おそらくシンボルテーブルをシリアル化することによって、これを考慮した解決策はありますか? Rubyでアクセスできますか?
編集 2 : シリアル化されたローカル変数を組み込むように回答を更新しました。これは許容できるようです。
ruby - このコードが Proc.call の後に nil を生成するのはなぜですか?
ゼロの原因は何ですか?
ruby - Procを呼び出すArgumentError
上記のprocを呼び出そうとすると、次のようになります。
私の期待は、メソッドがこのタイプのシグニチャーで定義されている場合、procをメソッドに渡すことができるということでした。
次に、次のようにprocinsiidefooを実行できます。
ruby - 引数が 1 つのシグネチャを持つメソッドに 2 つの引数を渡すにはどうすればよいですか?
についてどのようにone_arg
知ってい&s
ますか?
ruby - 明示的なリターンがProcに違いをもたらすのはなぜですか?
Ruby ではキーワードはオプションであり、要求するかどうかに関係なくreturn
常に ing していると思いました。それを考えると、明示的なinを含むという事実によって決定される と の出力が異なることreturn
は驚くべきことです。foo
bar
foo
return
Proc f
なぜこれが事実なのか誰にも分かりますか?
ruby - Rubyのprocとlambdaの「簡単な」説明はありますか?
Rubyのprocとlambdaの「簡単な」説明はありますか?
tcl - Tcl proc を出力するにはどうすればよいですか?
次のような単純な tcl proc があるとします。
プロシージャを出力するには、どの tcl コマンドを使用できますfoo
か...つまり、プロシージャのテキストを戻したいです...
例えば:
どうやってfoo {a b} {puts "$a $b"}
戻るの?
ruby - Ruby ブロックで「return」を使用する
「エンドユーザー」コードがRubyブロックに書き込まれるように、組み込みスクリプト言語にRuby 1.9.1を使用しようとしています。これに関する 1 つの問題は、ユーザーがブロック内で「return」キーワードを使用できるようにして、暗黙の戻り値について心配する必要がないようにしたいということです。これを念頭に置いて、これは私ができるようにしたいことです:
上記の例で「return」を使用すると、LocalJumpError が発生します。これは、問題のブロックがラムダではなく Proc であるためであることは承知しています。「return」を削除してもコードは機能しますが、このシナリオでは「return」を使用できるようにしたいと思います。これは可能ですか?ブロックをラムダに変換しようとしましたが、結果は同じです。