これはなに

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を使う必要がある。