@a = @b || @c
할당의 회선 변형을 수행하고 비어 있지 않은 경우 @b
을 취하려고합니다 (따라서 부울 감각으로는 true). 그렇지 않은 경우 @c
입니다. 설명서에 명시 적으로 내가 할 수 없다고 알려줍니다. (그리고 너무, 바로 사실에 관하여!)@b ||를 할당 할 수없는 이유는 무엇입니까? @c에서 @a로 Perl로?
은 "||", "//"와 "& &"연산자 ( 을 평가 마지막 값을 반환 C의 "||"와 "& & 달리 ", 0 또는 1을 반환).
는가 [...] 특히
, 이것은 당신이 과제에 대한 둘 사이의 집계를 선택하는이를 사용하지 말아야한다는 것을 의미 : 불행하게도
@a = @b || @c; # this is wrong @a = scalar(@b) || @c; # really meant this @a = @b ? @b : @c; # this works fine, though
은 정말하지 않습니다 이유를 말해줘.
@a =
오른쪽에리스트 문맥을 유도, 배열 할당입니다 : 나는 일어날 것 예상 무엇는이 있었다.
@b || @c
은 목록 컨텍스트에서 평가되는 오른쪽입니다.||
은 C 스타일의 단락 논리 또는. 왼쪽에서 오른쪽으로 (필요한 경우) 평가하고 컨텍스트를 전파합니다.@b
은 목록 컨텍스트에서 평가됩니다. true (즉,, 비어 있지 않은 경우)가 반환됩니다.- 그렇지 않은 경우
@c
도 목록 컨텍스트에서 평가되고 반환됩니다.
명백하게 말하면, 나의 어미에서 두 번째 나오는 말은 틀립니다. 왜? 더 중요한 것은 문서 또는 소스의 어느 부분이이 동작을 설명 하는가?
추 신 : 문제의 범위에서 벗어난 이유는 설명서의 삼항 연산자 사용에 대한 제안이 내 @b
이 실제로 임시 (함수 호출 결과)라는 것입니다.
"정말로 이것을 의미합니다"라는 줄은 이유를 알려줍니다. –
그게 왜 나보다. 하지만 편견이 있어요. –
나는이 주석이 "정말로 이것을 의미한다"는 것을 "정말로 이것을 의미한다"라고 바꾸어야한다고 생각한다. 그것이 그렇듯이 저는 스칼라()가 @a를 @b와 같게 만들려고합니다. 즉 저자가 정말로 사용하는 것으로 보이는 것입니다. 분명히 그렇지 않습니다. 대신 첫 번째 줄은 실제로 두 번째 줄을 의미합니다. 둘 다 원하는 결과를 얻지 만 원하는 답변은 아닙니다. – Rini