2012-09-01 3 views
2

정말 열심히해야하는 것처럼 보이지 않기 때문에 나는 정말 간단한 것을 놓치고 있어야합니다.왜 MATLAB 익명 함수 내에서 변수를 정의 할 수 있습니까?

이 코드는 올바른 :

clear all 
whatever = @(x) deal(q = 3; q*max(x), size(x)); 
input = randn(1,1000); 
[a b] = whatever(input)  

왜 휴식을 수행합니다

clear all 
whatever = @(x) deal(max(x), size(x)); 
input = randn(1,1000); 
[a b] = whatever(input) 

그러나,이 같은 내가 정말하고 싶은입니까? 나는 함수 안에서 q를 정의 할 수 없다 ?? 익명의 함수를 사용하고자하는 전체적인 이유는 실제로 그 안에 여러 줄의 코드를 작성한 다음 대답을 반환 할 수 있기 때문입니다. 익명의 함수의 마지막 문장이 반환되는 것이지만, 그 안에 변수를 정의하는 방법은 무엇입니까? 익명 함수 정의 전에 q를 정의하고 싶지 않습니다.

감사합니다.

+0

수 없습니다. '@ (x) deal (3 * max (x), size (x))'를하지 못하게하는 것은 무엇입니까? –

+0

@EitanT 그럴 수 있습니다. 내가 묻는 이유는 q가 some_very_complicated_function이기를 원하기 때문입니다. 그래서 코드가 끝내 읽을 수 있도록 place holder가 될 것입니다. 나는 실제 함수와 같은 방식으로 익명의 함수를 코딩 할 수 있다는 인상하에 있었다. 인간의 가독성을위한 것. – Spacey

답변

4

가하는 식으로 구성해야하기 때문에 당신은, 익명 함수 내에서 변수를 선언 할 수 없습니다, : 당신이 가독성을 원하는 경우 handle = @(arglist)expr

이 같은 함수 외부 q를 정의

q = 3; 
whatever = @(x) deal(q * max(x), size(x)); 
+0

Meh, 나는 그렇게 생각한다. -/ – Spacey

1

여러 명령을 처리 할 수 ​​없다는 것이 확실합니다. 여러 개의 매개 변수가 있지만 명령을 전달하려고합니다. 이게 효과가 있니?

whatever = @(x) q=3; deal(q*max(x), size(x)); 

또한 왜이 기능을 사용하지 않았습니까?

함수 내에서 정의하려는 경우 작업 할 다른 것을 얻을 수 없다면 실제 값을 넣을 수도 있습니다.

+0

_ "이거 작동할까요?"_ - 묻고 답 하시니? BTW, 대답은 : 그것은 작동하지 않습니다. –

+0

Camdroid, 위의 @EitanT에 대한 내 코멘트가 보입니다. 미래에 대한 인간의 가독성. – Spacey

2

그렇지 않습니다. 익명 함수에는 단 하나의 명령문 만 있습니다. 하위 함수를 사용합니다 (중첩 된 함수가 아니라 이상한 범위 지정 규칙을 가진 아픈 것들입니다).

function whatever = not_anonymous (x) 
    % your code here 
end 

함수 핸들을 전달해야하는 경우 @not_anonymous 만 사용할 수 있습니다.

+0

중첩 된 기능을위한 만세! : p –

2

다음과 같은 구문을 어떻게 생각하십니까?

tmpfun = @(x,q) deal... 
whatever = @(x) tmpfun(x,3) 
+0

그 생각은 내 마음에 일어났습니다, 예 ... – Spacey

관련 문제