問題タブ [pass-by-name]
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.
parameter-passing - 「名前渡し」とは何ですか。正確にはどのように機能しますか。
ウィキペディアとグーグルをチェックしましたが、ALGOL60で名前渡しがどのように機能するかについてはまだ頭を悩ませることができません。
scala - 名前別-コンストラクターのパラメーター
私の他の質問から来て 、コンストラクターの名前によるパラメーターを機能させる方法はありますか?オブジェクト内でオンデマンド/レイジー/名前で実行されるコードブロックを提供する方法が必要です。このコードブロックは、コードブロックがクラスの一部であるかのようにクラスメソッドにアクセスできる必要があります。 。
次のテストケースは失敗します:
出力:
programming-languages - 最新の本番アプリケーションで使用できる、ネイティブの参照渡し/名前渡しのセマンティクスを持つ言語はありますか?
これは再開された質問です。
私は言語とそのサポートプラットフォームを探しています。この言語には、デフォルトで参照渡しまたは名前渡しのセマンティクスがあります。私は歴史を少し知っています。Algol、Fortranがあり、それを可能にするC++がまだあります。しかし、基本的に、私が探しているのは、より現代的なものであり、前述のバリューパス方法論が優先され、デフォルトで(暗黙的に想定されています)。
私の考えでは、pass-by-ref / nameの利点のいくつかは明らかなように思われるので、この質問をします。たとえば、スタンドアロンエージェントで使用する場合、値のコピーは(ある程度)必要なく、その場合、パフォーマンスはそれほど低下しません。そのため、リッチクライアントアプリやゲームスタイルまたはスタンドアロンのサービスのようなアプリケーションで使用できます。
私にとっての主な利点は、シンボルのアイデンティティとその現在の値が明確に分離されていることです。つまり、冗長なコピーがない場合は、照会/受信した正確なシンボル/パスを使用していることがわかります。そして、値の興味をそそるボクシングは、プログラムの実際のロジックに干渉しません。
C#キーワードがあることは知っていますがref
、それは許容できるものの、それほど直感的ではありません。同様に、参照渡しのセマンティクスは、事実上すべての言語(インスタント例としてJava)などでシミュレートできることを認識しています。名前による渡しについてはよくわかりません:)
あなたは何をお勧めしますか-それが適切であるところならどこでもそのようなニーズのためにDSLのようなものを作成してください。または私がすでに知っているいくつかの言語を使用しますか?たぶん、私が見逃しているものがありますか?
ありがとうございました!
更新:現在、Haskellが適切だと思います。しかし、あまり調べていなかったので、後でこのテキストを更新すると思います。
c++ - C++でスタックのみを使用した場合の結果
C++を初めて使用する人を知っているとしましょう。彼はポインターを渡しません(当然そうです)が、参照によって渡すことを拒否します。彼は常に値渡しを使用します。その理由は、「参照によってオブジェクトを渡すことは、壊れたデザインの兆候である」と彼が感じているからです。
プログラムは小さなグラフィックプログラムであり、問題のパスのほとんどは数学的なVector(3タプル)オブジェクトです。いくつかの大きなコントローラーオブジェクトがありますが、それ以上に複雑なものはありません。
スタックだけを使用することに反対するキラーな議論を見つけるのは難しいと感じています。
ベクトルなどの小さなオブジェクトの場合、値の受け渡しは問題ありませんが、それでもコードで不要なコピーが多数発生します。大きなオブジェクトを値で渡すことは明らかに無駄であり、機能的に必要なものではない可能性があります。
プロ側では、スタックはメモリの割り当て/割り当て解除が高速で、割り当て時間が一定であると思います。
私が考えることができる唯一の主要な議論は、スタックがオーバーフローする可能性があるということですが、これが発生する可能性は低いと思いますか?参照渡しではなく、スタック/値渡しのみを使用することに反対する他の議論はありますか?
scala - 名前によるパラメーターでオーバーロードした場合のScalaの動作が、値によるパラメーターを使用した場合と異なるのはなぜですか?
このScalaコードを考えると:
byval(5)の呼び出しは正しくコンパイルされますが、bynameはコンパイルに失敗します。
なんで?オーバーロードに関して、値別パラメーターと名前別パラメーターで同じ動作が見られると思います…どうすれば修正できますか?
language-agnostic - オブジェクトを変更するために自動参照渡しに依存しても大丈夫ですか?
私はここでPythonで作業しています(実際には名前によるパスです)が、メソッドパラメーターが同様に動作する限り、アイデアは言語に依存しません。
私がこのような機能を持っている場合:
そしてそれをそのように呼びます、
new_dict
の修正バージョンになりますが、変更some_dict
もsome_dict
されます。
私の例のdictのような可変構造はほとんどの場合同様に小さく、パフォーマンスは問題ではないと仮定します(アプリケーションでは、抽象オブジェクトを取得し、さまざまなサービスのSOAP要求に変更します。ここで、SOAP要求は順序を取ります各サービスのデータを再フォーマットするよりも桁違いに長い)、これは大丈夫ですか?
これらdestination
の関数(いくつかありますが、私の例のように単なる効用関数ではありません)は常に変更可能ですが、明示的にしたいと思います。関数の戻り値は、渡したパラメーターに対する決定論的計算の結果を表します。 in。パラメーターを使用するのは好きではありませんが、可変構造を関数に渡すときにPythonでこれを回避する方法は実際にはありません。私が熟考したいくつかのオプション:
元のパラメーターを保持するために、変更されるパラメーターをコピーする
パラメータを変更するすべての関数でパラメータをコピーする必要があります。これは面倒で、多くを複製しているように見えます。さらに、実際にオリジナルが必要になることはないと思います。すでに持っていた変異オブジェクトへの参照を返すのは面倒なようです。
イン/アウトパラメータとして使用するだけです
私はこれが好きではありません、関数が何をしているのかすぐにはわかりません、そしてそれは醜いと思います。
パラメータを自動的にコピーするデコレータを作成します
やり過ぎのようです
だから私は大丈夫ですか?私は何かを隠しているような気がします。将来のプログラマーは、関数の呼び出し方法に基づいて元のオブジェクトが保持されていると考えるかもしれません(元のオブジェクトを変更するという事実に頼るのではなく、結果を取得します)。しかし、私はまた、選択肢のいずれかが厄介になると感じています。より好ましい方法はありますか?ソフトウェアの動作方法により、抽象データを表すクラスにミューテイタースタイルのメソッドを追加することは実際にはオプションではないことに注意してください(そのデータ構造をすべてのサービスの対応するSOAP構造に変換するメソッドを追加する必要がありますそのデータも送信します-現在、変換ロジックはサービスごとに個別のパッケージに含まれています)
scala - 何もしないハンドラーを名前によるパラメーターに設定するにはどうすればよいですか?
ノードを作成するメソッドを定義しました。このメソッドtreeNode
は子ノードを持つことができます。簡略化されたコードは次のとおりです。
この方法を使用するときは、次のように書く必要があります。
子を持たないリーフノードを確認できますが、空のブロックが必要{}
です。
children: => Any
パラメータにデフォルトの何もしない値を与える方法はありますか?コードを次のように書くことができます:
ヘルプ〜
parameter-passing - 名前渡しと値渡しの結果
私のプログラミング言語クラスでは、名前渡しと値渡しの結果がどのように機能するかを理解しようとしています。これらが主流の言語ではほとんど使用されていないことはわかっていますが、それらがどのように機能するかを感じたいと思っています。例として (言語に依存しない):
pass-by-value-result と pass-by-name の両方で swap が呼び出された後の val と list の値はどうなるでしょうか。
説明も素晴らしいでしょう。
私が推測したところ、それは value-result: val=2, list={1,1,3,4,5} と name: val=3, list={1,2,1,4,5} を得ました。私はそれらの結果について非常に確信が持てません。
また、単一の int ではなく配列が渡されたときに、これらの両方のメソッドが機能する方法が変わりますか? 事前に助けてくれてありがとう。
scala - 名前による型パラメーター
次のクラス定義があるとします。
そして、私は次のことをしたい
ただし、コンパイラは「ここでは名前によるパラメーターの型は許可されていません」で失敗します
ジェネリック メソッドの型パラメーターとして名前による型を使用するにはどうすればよいですか?
python - Python: kwargs と一緒に名前でパラメータを渡す
Python では、次のことができます。
次に、関数を呼び出して、引数を名前で渡すことができます。
また、これを行うことができます:
だから私は、次のような両方の方法を組み合わせることが可能かどうか疑問に思っていました:
一般的に、どのような組み合わせができますか?
私のばかげた質問に感謝し、申し訳ありません。