2011-07-29 8 views
0
func1(func2); 

Perl은 평가할 컨텍스트를 알아야하지만 위의 경우 func2은 스칼라 또는 목록 컨텍스트에 있음을 어떻게 알 수 있습니까?func2는 컨텍스트를 어떻게 알 수 있습니까?

+0

'func1'에 프로토 타입 (ala'sub func1 ($$$)')을 포함시키지 않는 한 스칼라라고 생각합니다. –

+1

@Ben Jackson : 아니오, 프로토 타입'func2'가 없을 때 호출됩니다. 목록 컨텍스트 - 인수 목록 *의 일부입니다. –

답변

5

func1에 프로토 타입 (또는 @ 프로토 타입)이 없으면 목록 컨텍스트가됩니다. func1의 프로토 타입이 $이면 스칼라 컨텍스트가됩니다.

경고 : 프로토 타입을 사용하지 마십시오. evil입니다.

2

분명히. 그것의 목록입니다.

$ perl 
sub f1 { print "called f1\n" } 
sub f2 { print "called f2\n"; print wantarray ? "list": "scalar"; print "\n"; } 
f1(f2); 
^d 
called f2 
list 
called f1 

왜? 이것은 또 다른 질문입니다. 함수 매개 변수가 암시 적으로 나열 될 수 있기 때문에 무엇을 기대할 수 있다고 가정합니다.

+0

'f1'이 프로토 타입을 정의 할 때 일어나는 일을 보여줌으로써 그림을 완성 할 수 있습니다. – Zaid

+1

"왜?", 어떤 맥락에서 당신은 논쟁의 목록이 만들어 져야한다고 생각합니까? – ikegami

관련 문제