2

これはそれほど難しいことではないように思われるので、私は本当に単純なものを見逃しているに違いありません。

このコードは正しいです:

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

しかし、私が本当にやりたいのは次のようなものです。

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

なぜこれが壊れますか?関数内でqを定義できませんか?私が無名関数を使用したい理由は、実際にその中で複数行のコードを実行して、答えを返すことができるようにするためです。匿名関数の最後のステートメントが返されるものだと思いますが、それらの中で変数を定義するにはどうすればよいですか?無名関数を定義する前にqを定義したくありません。

ありがとう。

4

4 に答える 4

5

匿名関数内で変数を宣言することはできません。これは、式から構築する必要があるためですhandle = @(arglist)expr

q読みやすさが必要な場合は、次のように関数の外部で定義します。

q = 3;
whatever = @(x) deal(q * max(x), size(x));
于 2012-09-01T16:34:48.067 に答える
2

あなたはそうしない。匿名関数には1つのステートメントしかありません。そのためにサブ関数を使用します(ネストされた関数ではなく、それらは奇妙なスコープ規則を持つ病気のものです)。

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

関数ハンドルを渡す必要がある場合は、を使用できます@not_anonymous

于 2012-09-01T16:34:38.967 に答える
2

次の構成についてどう思いますか。

tmpfun = @(x,q) deal...
whatever = @(x) tmpfun(x,3)
于 2012-09-01T19:11:13.393 に答える
1

取引は複数のコマンドを受け入れることができないと確信しています。確かに複数のパラメーターがありますが、コマンドを渡そうとしています。これは機能しますか?

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

また、なぜあなたはこれを持っていないのですか?

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

関数内で定義する場合、他に何も機能させることができない場合は、実際の値をそこに配置することもできます。

于 2012-09-01T16:29:26.493 に答える