ホームページ  >  記事  >  バックエンド開発  >  異なるポインター型の 3 つの引数を持つ Sprintf (nil の可能性あり)。三項演算子は使用できません。数十行の記述を避けるにはどうすればよいですか?

異なるポインター型の 3 つの引数を持つ Sprintf (nil の可能性あり)。三項演算子は使用できません。数十行の記述を避けるにはどうすればよいですか?

WBOY
WBOY転載
2024-02-12 20:20:091186ブラウズ

具有 3 个不同指针类型的参数(可以为 nil)的 Sprintf。三元运算符不可用,如何避免写几十行?

php エディター Zimo は、Sprintf 関数に関する質問に答えます。場合によっては、文字列をフォーマットするために Sprintf 関数を使用する必要がありますが、場合によっては、3 つの異なるポインター型のパラメーターがあり、これらのパラメーターが nil である状況に遭遇することがあります。この場合、三項演算子は使用できません。使用しないと、コードが冗長になり、読みにくくなります。では、何十行にも及ぶ長いコードの記述を避けるにはどうすればよいでしょうか?次に、簡単な解決策を紹介します。

質問内容

この文字列を作成するためにsprintfを使用したいのですが

リーリー

エンティティでは、変数はポインタであり、nil:

になる可能性があります。
  • name*string
  • です
  • levelcode には *levelcode タイプ
  • があります
  • カテゴリコードには *カテゴリコードタイプ
  • があります

しかし、値がある場合は、ポインタではなく値が必要です。 (つまり、ユニット abc のレベルはゼロですが、管理ユニット カテゴリ に属します)

どの言語を使用しても、私は次のように書きます:

リーリー

ただし、go では三項演算子を使用できません。 nil 値を処理しない場合、sprintf は例外をスローします。

それでは、このように始めなければなりませんか?

message := fmt.sprintf("unit %s has a level of %v, but is of category %v",
    *entity.name, *entity.levelcode, *entity.categorycode)

解決策

ありがとうございます。ご協力のおかげで、関数を正常に構築できました。

リーリー

このように呼ばれます

リーリー

単一の sprintf に対して 5 つのステートメントを記述します...しかし、それは機能します。

以上が異なるポインター型の 3 つの引数を持つ Sprintf (nil の可能性あり)。三項演算子は使用できません。数十行の記述を避けるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。