これはなに

MATLABのarguments
構文で関数の引数を検証するとき、string
の長さを検証するためにmustBeNonempty
を使っても、長さゼロのstring
(""
)はエラーにならないという話。
例

たとえば、次のような関数を定義したとする。
function foo(s)
arguments
s (1, 1) string {mustBeNonempty}
end
end
このとき、foo("")
を実行すると、エラーにならない。
>> foo("")
ans = ""
解決策

どうやらMATLABの仕様上、長さゼロのstring
(""
)は空とみなされないらしい。そのため、mustBeNonempty
は効かない。
長さゼロのstring
(""
)を検証するためには、mustBeNonzeroLengthText
を使う必要がある。
function foo(s)
arguments
s (1, 1) string {mustBeNonzeroLengthText}
end
end
このようにすると、foo("")
を実行するとエラーになる。
>> foo("")
Error using foo (line 4)
Invalid value for argument 's'. Must be a non-zero length text.
ただし、mustBeNonzeroLengthText
はMATLAB R2020bから追加された関数なので、これより古いバージョンのMATLABでは使えない。
まとめ

MATLABのarguments
構文で、長さゼロのstring
(""
)を検証するためには、mustBeNonempty
ではなく、mustBeNonzeroLengthText
を使う必要がある。