문제

이 조각의 펄 코드에 내 프로그램입니다 주는 잘못된 결과입니다.

$condition ? $a = 2 : $a = 3 ;
print $a;

아무리 값의 $condition 는 출력은 항상 3,무엇입니까?

도움이 되었습니까?

해결책

이 설명서는 Perl 문서.

때문에의 펄 연산자 우선 순위는 문가로 구문 분석

($condition ? $a= 2 : $a ) = 3 ;

기 때문에?:운전자 생산 할당 가능한 결과,3 에 할당하는 결과의 조건이 있습니다.

때$조건이 true 이미($=2)=3 제공$a=3

때$조건이 거짓 이미($a)=3 제공$a=3

올바른 방법으로 쓰는 이가

$a = ( $condition ? 2 : 3 );
print $a;

우리는 물에 의해 이 일에,그래서 내가 여기고 다른 사람이 그것을 찾을 것입니다 유용합니다.

다른 팁

일단 당신이 암시하는 당신은 수도에서 고통을 우선 순위 문제 속을 알 Perl 생각을 의미:

perl -MO=Deparse,-p -e '$condition ? $a= 2 : $a= 3 ; print $a;'

귀하의 경우에는,당신을 보여주지:

(($condition ? ($a = 2) : $a) = 3);
print($a);
-e syntax OK

...시점에서야 말하는"오,그것은 그것을 설명한"!

단지 확장 이전 답변...는 경우,어떤 이유로,할당해야 할 부분의 조건부,당신은 그것을 쓰고 싶어 나옵

$condition ? ($a=2) : ($a=3);

도움이 될 것이라는 당신이 할당을 다른 변수에 따라 상태입니다.

$condition ? ($a=2) : ($b=3);

그리고 당신이 선택하는 변수,하지만 할당하여 같은 일이 무슨 상관 없이,당신은 심지어는 이렇게:

($condition ? $a : $b) = 3;

때문에의 펄 연산자 우선 순위는 문가로 구문 분석:

($condition ? $a = 2 : $a ) = 3 ;

기 때문에?:운전자 생산 할당 가능한 결과,3 에 할당하는 결과의 조건이 있습니다.

때$조건이 true 이미$=2=3 제공$a=3

때$조건이 거짓 이러=3 제공$a=3

올바른 방법으로 쓰는 이가

$a = $condition ? 2 : 3;

일반적으로,당신은 정말 나의 습관을 사용하여 조건을 지정,원래 예에서-그것의 종류의 것에 이르는 Perl 얻는 명성을 쓰기 전용입니다.

좋은 엄지손가락의 규칙은 조건문은 간단한 값을 적는 식으로 부작용이 있습니다.할 때나 다른 사람이 필요한 이것을 읽는 코드는 여덟 개월이 지금부터,당신은 그것을 선호를 읽을 다음과 같이?

$x < 3 ? foo($x) : bar($y);

또는 이것을 좋아하는가?

if ($x < 3) {
  $foo($x);
} else {
  $bar($y);
}

한 가지 제안을 Tithonium 의 대답은 상기:

싶어하는 경우 다른 값을 할당하여 같은 변수,이 나을 수 있습니다(사본 책 way):

$a=($condition)?2:3;

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top