問題タブ [subroutine]
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.
perl - Perl:パラメータが渡されたcmptheseテキストと匿名サブの問題
Perlベンチマークモジュールのドキュメントcmptheseを読んだ場合、テキストまたはサブルーチン参照のいずれかのコードで使用できる、または使用できると記載されています。ドキュメントは、これらの形式が完全に交換可能であることを示唆しているようです。cmpthesetimethese
文字列形式で渡されたパラメーターと、。を使用したサブルーチン参照形式で問題が発生していcmptheseます。の値@arrayが渡されないか、実行時エラーが発生します。
私は次のコードを持っています:
私が持っているすべてのフォームは正しく機能するevalので、これはベンチマークの問題である可能性がありますか?私はすべてのグーグルfooを使用して、2つのフォームの間に文書化された違いを見つけようとしましたが、できません。
上記の私の簡単な例が期待どおりに機能しないように見える理由を誰かが知っていますか?コード内のコメントは、OS X、Perl5.10.0で発生している問題を示しています。
perl - 「引数をサブルーチンに渡す」-質問?
routine2 も問題ありませんか、これを行うべきではありませんか? (サブルーチンに @list のコピーは必要ありません)
perl - サブルーチンの引数は、外部変数よりも使用が遅いのはなぜですか?
次のコードを実行します。
次のベンチマーク結果が得られます。
NODEFAULT バージョンが DEFAULT バージョンよりもずっと遅いのはなぜですか?
perl - ローカル perl モジュールへの変更が認識されない
独自のファイルに単一の perl サブルーチンがあります。これは、2 つの異なる perl スクリプトによって別々に呼び出されます。渡された引数のリストを変更し、両方の呼び出しスクリプトに必要な変更を加えましたが、期待どおりに動作するスクリプトは 1 つだけです。別のバージョンで perl デバッガーを使用すると、デバッガーがモジュールのサブルーチンにステップインすると、編集前のモジュールの外観が表示されます。したがって、そのスクリプトを実行すると、新しい引数リストが渡されますが、モジュールはそれらを古い方法で割り当てようとしていますが、これは明らかに間違っています。
何が原因でしょうか? あるスクリプトは正しく機能し、他のスクリプトは機能しないのはなぜですか?
具体的には、はい、strict と warnings を使用しています。年:
そしてモジュールで:
引数への配列参照を追加しました。呼び出しスクリプトの新機能は次のとおりです。
モジュールの新機能:
デバッガーでスクリプトを実行してこのモジュールにステップインすると、モジュールを変更していないかのように、サブルーチンの最初の行として $_[0] から $string が割り当てられていることが示されます。
繰り返しますが、これは私のスクリプトの 1 つでのみ発生しますが、他のスクリプトは正常に動作します。すべてが同じディレクトリにあります。これをLinux、perl 5.10で実行しています。私は困惑しています!
types - ヘルプ!FORTRAN 整数を渡すと、それらが不正確な浮動小数点数に変換されますか?
スカラー INTEGER s を作成してサブルーチンに渡すと、その値が float に変換され、ひどく不正確になります。たとえば、s = 2 を設定し、 print_my_int(s) を呼び出してコンソールに出力すると、値は 2.80259693E-45 と表示されます。他のスカラー整数も同様に動作しますが、s = 0 の場合を除いて、出力は 0.0000000 です。しかし、整数は明らかに小数と仮数を表示すべきではないため、これでもまだ間違っています。これは出力形式の問題ではありません。ローカルで表示されたときに他の整数を適切に表示できるからです。
ここで何が起こっているかの手がかりはありますか?サブルーチン定義で引数のデータ型を強制する必要がありますか? これもできますか?
コード例:
結果の出力:
applescript - アイテムの情報を取得する際の問題 (applescript)
私はかなり優れたアップルスクリプターであり、これについて何か助けが欲しい. Windows XP のごみ箱に似たごみ箱アプリケーションを作成しています。もちろん水滴です。アイテムをアプリケーションにドロップすると、アプリケーションは、ごみ箱 (ゴミ箱) のサイズ制限を超えていないかどうかを確認するように設計されたサブルーチンを開始します。ただし、ゴミ箱内のアイテムの情報を取得しようとすると、「Finder でエラーが発生しました。ファイル アイテム 1 が見つかりませんでした」というエラー メッセージが表示されます。私は本当に助けが必要です :( サブルーチンは以下の通りです:
perl - このPerlが「CODE参照ではない」を生成するのはなぜですか?
実行時にPerlシンボルテーブルからメソッドを削除する必要があります。を使用してこれを実行しようとしましundef &Square::areaたが、関数は削除されますが、いくつかの痕跡が残ります。具体的には、$square->area()が呼び出されると、Perlは、私が期待している「未定義のサブルーチン&Square :: area called」ではなく、「CODE参照ではない」と文句を言います。
「なぜそれが重要なのですか?関数を削除したのに、なぜそれを呼び出すのですか?」と尋ねるかもしれません。答えは、私がそれを呼んでいないということです、Perlはそうです。SquareはRectangleから継承し、継承チェーンをに渡したいのですが、メソッドが存在しないSquareをスキップしてRectangleのarea()にフォール$square->areaスルー&Rectangle::areaする代わりに、メソッド呼び出しは「コード参照ではありません」で終了します。
奇妙なことに、これは&Square :: areaがtypeglob割り当てによって定義された場合にのみ発生するようです(例*area = sub {...})。関数が標準的なsub area {}アプローチを使用して定義されている場合、コードは期待どおりに機能します。
また興味深いことに、グロブ全体の定義を解除すると、期待どおりに機能します。サブルーチン自体の定義を解除しないでください。
症状を説明し、正しい動作と対比する短い例を次に示します。
更新:それ以来、Package :: Stashを使用してこの問題を解決しました(@Etherに感謝)が、そもそもなぜそれが起こっているのかまだ混乱しています。perldoc perlmod言う:
package main;
sub Some_package::foo { ... } # &foo defined in Some_packageこれは、コンパイル時のtypeglob割り当ての省略形です。
BEGIN { *Some_package::foo = sub { ... } }
しかし、関数の定義を解除した後、2つは異なる動作を引き起こすため、これは単なる速記ではないようです。これが(1)誤ったドキュメント、(2)perlのバグ、または(3)PEBCAKのいずれの場合であるかを誰かに教えてもらえれば幸いです。
perl - perl サブルーチン リファレンス
フィールドごとに異なる検証ルールのセットを持つ一連のフィールドがあります。
ハッシュ参照を検証するためのサブルーチン参照を配置しました。
現在、コンストラクターにありますが、プライベートサブでコンストラクターから取り出したいです。
以下のようにしました
ここで、このすべての検証ルールをコンストラクターから取り出して、以下のようなことを行いたいと考えています。これにより、タイプ フィールドに基づいて検証ルールをより適切に制御できるようになります。フィールドの値を上書きするだけで、他のルールのルールを上書きできます。)
しかし、私はCan't use string ("") as a subroutine ref while "strict refs" in use at...、サブ参照でのこの動作の理由を誰にでも教えてもらえますか? 名前キーを確認すると、null またはサブ {DUMMY} になります。
analysis - アーキテクチャ分析: すべてのレジスタがサブルーチンによって使用される場合、マシンは新しいサブルーチンにジャンプする前に何をする必要がありますか?
OO プログラミングでは、頻繁に実行されるコードの小さなチャンクをメソッドに編成します。これにより、コピー/ペーストと比較してコードの総量が削減されます (他の利点の中でも特に)。アセンブリ言語と機械語では、これらの再利用可能なチャンクはサブルーチンと呼ばれます。
多くの場合、元のルーチンと呼び出されたサブルーチンは、使用可能なレジスタの多くまたはほとんどを使用します。
すべてのレジスターがサブルーチンによって使い果たされた場合、新しいサブルーチンにジャンプする前にマシンが何をしなければならないかを説明してください。
applescript - Applescript サブルーチンの問題
私はかなり並外れたアップルスクリプターであり、長い間スクリプトを書いてきました。私が現在作成しているアプリケーションには、「データベース イベント」アプリケーションの使用が含まれます。サブルーチンを使用してフィールドの値を設定しようとしています。どうやら、「set_duration を続行できません」で、何が問題なのかわかりません。現在のソースコードは以下です。