可変引数関数には書式設定ディレクティブが必要ですか?

WBOY
リリース: 2024-02-09 14:40:09
転載
1138 人が閲覧しました

可変引数関数には書式設定ディレクティブが必要ですか?

PHP の可変パラメータ関数は、関数定義で無限の数のパラメータを使用できる非常に便利な関数です。ただし、可変引数関数で書式設定ディレクティブを使用する必要があるかどうかは、特定のニーズによって異なります。フォーマット命令は通常、パラメーターを特定のフォーマットで出力または処理するために使用されます。たとえば、printf() 関数を使用する場合は、フォーマット文字列を指定する必要があります。可変パラメーター関数のパラメーターを書式設定する必要がある場合は、当然ながら書式設​​定命令を使用する必要があります。ただし、単にパラメータを他の関数に渡したり、基本的な操作を実行したりするだけの場合は、フォーマット命令を使用する必要はありません。つまり、可変個引数関数で書式設定命令を使用する必要があるかどうかは、特定のビジネス要件によって異なります。

質問の内容

いくつかの位置引数を受け取り、最後に any スライスを伝播する可変個引数関数 respond があります。この関数は、コンテキストに応じて最後のパラメーターを異なる方法で使用します (messagedatastatus の値に応じてどのように異なるかに注意してください):

リーリー

次の呼び出しに対して警告が表示されません:

リーリー

ただし、次の警告では、引数を指定して respond が呼び出されますが、書式設定ディレクティブ は発生しません (ただし、コードは期待どおりに実行されます。person です)構造体) :

リーリー

私の素人目には、 可変個引数関数は最後にフォーマット文字列とそのフォーマットの引数 を期待しているように見えます。しかし、なぜそうなるのでしょうか?可変個引数関数で実行できる内容に制限はありますか?

それとも、responder を 2 つの部分 (「ok」と「not ok」) ごとに 1 つずつ分割したほうがよいでしょうか?

議論については https://github.com/golang/go/issues/26486 および https://go.dev/src/cmd/vet/testdata/print/print.go (行 316) も参照してください。 このメッセージgo コード内 (@mkopriva と @jimb がコメントで述べているように、リンターから警告が表示されます)

回避策

警告はリンターから来ています。 respond() 関数を呼び出すときに使用される関数が、その後に指定された引数と一致しません。

この特定のメッセージは、ログを記録する printf パーサー からのものです:

printf: printf フォーマット文字列とパラメータの一貫性を確認します

このチェックは、fmt.printf や fmt.sprintf などの書式設定関数の呼び出し、 およびこれらの関数に対して検出されたラッパー に適用されます。

response() 関数は、format および a パラメーターを使用して fmt.sprintf() をそのまま呼び出すため、これは次のようになります。これを fmt.sprintf() のラッパーとして考えてください。

この警告メッセージを回避または削除したい場合、最も簡単な「修正」は、これらのパラメータをそのまま使用しないことです。たとえば、パラメータの 1 つをコピーして、それを渡します。 リーリー

以上が可変引数関数には書式設定ディレクティブが必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!