問題タブ [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 - サブルーチンの再定義
以前にこの質問をしたり、検索して他の人が尋ねたのを見たことがあります。なぜ「Subroutine mySub redefined at ../lib/Common.pm line x」という警告が表示されるのですか? そして、同じコードで sub を 2 回宣言した答えが常に得られます。このテスト パッケージを作成しました。
ファイル全体 ---------------
ファイル全体 ---------------
そして、このパッケージを使用する他のパッケージを使用するperlスクリプトからこのパッケージを使用すると、次の警告が表示されます。
サブルーチン ThisSubroutineIsNotDefinedAnywhereElse が ../lib/MyCommonPkg.pm 行 19 で再定義されました。
このサブルーチンを他の場所で宣言していないことを約束します。これは循環参照が原因ですか?この警告の原因を追跡して修正するにはどうすればよいですか?
perl - どのサブルーチンにいるのかを知るにはどうすればよいですか?
perl コードの一部を囲むサブルーチンの名前を取得する方法はありますか? 例えば:
を出力します'foo'
。
function - Fortranは、関数およびサブルーチンの呼び出しを通じて内部変数の値を保持しますか?
非常に骨の折れるデバッグの後、私はここでstackoverflowで確認したいFortranのユニークなプロパティを見つけたと思います。
私が気付いたのは、少なくとも、内部論理変数の値は、関数またはサブルーチンの呼び出し全体で保持されるということです。
これが私のポイントを説明するためのいくつかのサンプルコードです:
これは出力です:
ご覧のとおり、関数またはサブルーチンが1回呼び出されると、論理変数negative
は、に切り替えられた場合、型宣言ステートメントでto.TRUE.
が初期化されても、そのまま残ります。negative
.FALSE.
もちろん、negative = .FALSEの行を追加するだけで、この問題を修正できます。関数とサブルーチンで変数を宣言した後。
しかし、これが必要なのは私には非常に奇妙に思えます。
移植性とコードの再利用性のために、言語(またはコンパイラー)は、サブルーチンまたは関数が呼び出されるたびに、すべての内部変数の再初期化を要求するべきではありませんか?
perl - サブルーチンの引数のデフォルト値
サブルーチンのデフォルト引数を設定する方法がわかりません。ここに私が考えたものがあります:
必要な引数が 1 つだけの場合は、これで問題なく機能します。複数の引数のデフォルト値をどのように設定しますか?
私はこれをするつもりでした:
しかし、それは大変な作業です...もっと簡単な方法があるはずです。おそらくベストプラクティス?
perl - Perl のサブルーチンとスクリプト
私は Perl にかなり慣れていないので、サブルーチンに関するベスト プラクティスが Perl でどのようなものか疑問に思っていました。サブルーチンが大きすぎる可能性はありますか?
私は現在スクリプトに取り組んでおり、別のスクリプトを呼び出す必要があるかもしれません。サブルーチンの形で古いスクリプトを新しいスクリプトに統合するだけですか? スクリプトに 1 つの引数を渡す必要があり、1 つの戻り値が必要です。
元のスクリプトから出力を取得するには、ある種の黒魔術を行う必要があると思います。
perl - Perl でサブルーチン再定義エラーを処理する方法
だから私は要するにこの問題を抱えているファイルを持っています...
サブルーチンremove
が再定義されたことを示すエラーが表示されます。私は問題を知っていますremove
.POSIXで呼び出されるサブルーチンがあります. しかし、私はそれを処理する方法がわかりません。この問題は通常どのように解決されますか?
multithreading - perl/pdl でスレッドを使用してサブルーチンのループを置き換える方法
perl モジュールの一部として完全に優れた perl サブルーチンを作成しました。あまり詳細には触れずに、文字列と短いリストを引数として (端末から取得することが多い) 取り、値を吐き出します (現在、常に浮動小数点ですが、常にそうであるとは限りません)。
現在、引数のリスト部分は 2 つの値、たとえば (val1,val2) を取ります。for ループを使用して、val1 と val2 の何百もの異なる値のサブルーチンの出力を保存します。各反復が完了するまでにほぼ 1 秒かかるため、このプロセス全体を完了するには数時間かかります。
私は最近、「スレッド化」と呼ばれる神秘的な (私にとって) 計算ツールについて読みました。これは明らかに for ループを非常に高速な実行時間に置き換えることができます。これらが何なのか、何をするのか理解に苦しんでいますが、並列コンピューティングと関係があるのではないかと思います (また、並列プロセッサ用にモジュールを可能な限り最適化したいと考えています)。
val1 に渡したいすべての値をリストとして保存する場合、たとえば @val1 と val2 についても同様にすると、これらの「スレッド」を使用して、val1 と val2 の要素のすべての組み合わせに対してサブルーチンを実行するにはどうすればよいでしょうか? また、この手順を val3、val4 なども受け取るサブルーチンに一般化する方法を知っておくと役立ちます。
perl - Perlでは、特定の関数がどのモジュールからインポートされたかを確認するにはどうすればよいですか?
関数を呼び出すコードがあります。しかし、この関数が属するモジュールがわかりません。この関数を変更する必要があります。
どうすれば確認できますか?
perl - Perlでネストされたサブルーチンを使用する必要がありますか?
私の環境の5つの異なる状態の検証スクリプトである5つのPerlファイルがあります。
それぞれに少なくとも2つのサブルーチンがあります。
これまで、州の数は5つに制限されており、これらは正常に機能していました。しかし今、私は環境の状態がさらに20あり、現在の設計によれば、Perlスクリプトがさらに20あります。
5つのスクリプトすべてを、状態を引数として取り、5つの異なる状態に対して5つの異なるサブルーチンを持つ1つのスクリプトに移動したいと思います。
このように、さらに別の状態の検証を追加する必要がある場合は、まったく新しいPerlスクリプトではなく、新しいサブルーチンを定義するだけで済みます。
問題は、ネストされたサブルーチン(問題が発生することが知られている)を使用すること、またはサブルーチン自体を展開することを意味することです。
例えば、
オリジナルのスクリプト
統合されたスクリプト
これを解決するにはどうすればよいですか?
perl - Perlで、名前がハッシュの値であるサブルーチンを呼び出すにはどうすればよいですか?
電話をかける正しい方法は何route()
ですか?