는 내가 배열을이 구문을 사용하려배열과 함께 작동하지 않는 이유는 무엇입니까?
$x ||= 1;
같은 변수에 대한 디폴트 값을 제공하기 위해 ||=
연산자를 사용하지만 구문 오류가 발생했습니다 :
@array||= 1..3;
Can't modify array dereference in logical or assignment (||=) ...
그 의미와 방법 배열에 기본값을 제공해야합니까?
는 내가 배열을이 구문을 사용하려배열과 함께 작동하지 않는 이유는 무엇입니까?
$x ||= 1;
같은 변수에 대한 디폴트 값을 제공하기 위해 ||=
연산자를 사용하지만 구문 오류가 발생했습니다 :
@array||= 1..3;
Can't modify array dereference in logical or assignment (||=) ...
그 의미와 방법 배열에 기본값을 제공해야합니까?
||
은 스칼라 연산자이기 때문에. @array||= 1..3;
이 작동하면 스칼라 컨텍스트에서 1..3
을 평가할 것입니다. 이는 원하지 않는 것입니다. 스칼라 컨텍스트에서 배열을 평가하기도합니다 (스칼라 컨텍스트의 빈 배열이 false이기 때문에 괜찮습니다). 단 scalar(@array)
에 할당 할 수 없다는 점이 다릅니다.
@array = 1..3 unless @array;
을하지만 초기화 된 적이없는 배열과 빈리스트를 할당 된 하나의 차이를 알 수있는 방법은 없습니다 있습니다. 이것은 스칼라와 같지 않습니다. undef
과 빈 문자열을 구별 할 수 있습니다 (||=
은 구별하지 않습니다).
eugene y found this perl.perl5.porters message (공식 Perl 개발자 메일 링리스트)이 이에 대해 자세히 설명합니다.
이 page는 이럴, 좋은 설명이 있습니다
op= can occur between any two expressions, not just a var and an expression, but the left one must be an lvalue in scalar context.
Since
@x ||= 42
is equivalent toscalar(@x) = @x || 42
, and you aren't allowed to usescalar(@x)
as an lvalue, you get an error.
'||'하지 그것이 피연산자 남아에 스칼라 문맥을 부과는하지만 스칼라 연산자. Perlop에서 : "스칼라 또는 목록 컨텍스트가 평가되면 오른쪽 피연산자로 전달됩니다." ''print '[1, 2, 3]' –
* "을 출력 할 수있는 방법은 없습니다. 한번 초기화되지 않은 배열과 빈리스트가 할당 된 배열의 차이점을 알려주십시오. "* 차이점을 말하기 란 불가능합니다. * 차이점은 없습니다. – Borodin
이 답변은 완전히 잘못되었습니다. 'perl -le'print 0 || 1..3 "은'123'을 출력하고,'print scalar (1..3) '와 같이 빈 줄은 인쇄하지 않습니다. – ikegami