5

構文は何ですか

if (1) {}

行う?

この構文のドキュメントが見つからず、1 はブール値として扱われません。私は正しいですか?

4

9 に答える 9

19

技術的には、if (1)これは常に実行される if ステートメントであるため、興味深いことは何もありません。

の一般的な使用方法の 1 つif (1)は、たとえばデバッグ目的で、すばやく無効にしたいコードをラップすることです。を にすばやく変更しif (1)if (0)、コードを無効にすることができます。

于 2013-07-08T15:48:51.360 に答える
7

はい、1 は true として扱われるため、次のブロックif (1)は常に実行されます。

perldocから

数値 0、文字列 '0' と "" 、空のリスト () 、および undef はすべて、ブール コンテキストでは false です。他のすべての値は true です。

于 2013-07-08T15:49:35.003 に答える
4

1この場合、 は実際にブール値として扱われ、常に に評価されtrueます。

これは基本的に常にif通過するステートメントです(そもそも不要です)。

于 2013-07-08T15:47:51.747 に答える
2

コードブロックを実行します。それは以下と同等です:

{
  ...
}

池上さん追加:

いいえ、ちがいます。

{ ... }は「ベア ループ」であり、1 回だけ実行されるループです。nextlastおよびの影響を受けredoます。

if (1) { ... }ループではありません。nextlastおよびの影響を受けませんredo

>perl -E"for (1..3) { say $_; if (1) { next; } say $_; }"
1
2
3

>perl -E"for (1..3) { say $_; { next; } say $_; }"
1
1
2
2
3
3

ただし、どちらもレキシカルスコープを作成するという点で似ています。

于 2013-07-08T15:48:10.613 に答える
1

1 がfalse に評価されないという事実により、1はブール値の true として扱われているようです。Perl でブール変数を使用するにはどうすればよいですか? をif参照してください。

于 2013-07-08T15:49:53.587 に答える
0

ではperl、次の値が考慮されますfalse

0
Empty String

他のすべてが考慮されますtrue

そのため、if (1)常にtrue

于 2013-07-08T15:48:26.503 に答える
0

if(1)確かに毎回trueを返します。コードブロックと同様に、スコープを定義する以外は何もしません

于 2013-07-08T15:48:42.020 に答える