如何在 MATLAB 中调用短路逻辑运算符作为函数?
How to invoke short-circuit logical operators in MATLAB as a function?
MATLAB 运算符通常转换为函数形式,如下例所示:
~A
=> not(A)
A + B
=> plus(A,B)
A(...)
=> subsref(...)
A(...) = ...
=> subsasgn(...)
- 等等
现在请考虑运算符 &&
and ||
.
各种文档 (1-doc for or, 2-doc for and, 3-the MATLAB Programming Fundamentals ebook) 对此没有任何说明,help and
、help or
、help relop
也没有说明。
这也没有帮助:profile('on','-detail','builtin')
.
我能说的是 |
似乎被重定向到 or()
从下面的例子来看:
>> 1 || [0,0]
ans =
1
>> 1 | [0,0]
ans =
1 1
>> or(1,[0,0])
ans =
1 1
>> 1 && [0,0]
Operands to the || and && operators must be convertible to logical scalar values.
所以我的问题是:假设这是可能的 - 如何显式调用 &&
和 ||
的底层函数?
(注:本题涉及"how"的方面,不是[=60=])
不能有实现底层功能的函数。假设有一个实现此运算符的函数 scor
,然后调用 scor(true,B)
会在调用 scor
之前计算 B
,但运算符不会计算 B
。
显然可以定义 scor scor=@(x,y)(x||y)
,但它会计算大写的 B
。
/关于使用函数句柄的注释,这可能是一种解决方法:
%not printing a:
true||fprintf('a')
%printing a:
scor=@(x,y)(x||y)
scor(true,fprintf('a'))
%not printing a:
scor(true,@()(fprintf('a')))
MATLAB 运算符通常转换为函数形式,如下例所示:
~A
=>not(A)
A + B
=>plus(A,B)
A(...)
=>subsref(...)
A(...) = ...
=>subsasgn(...)
- 等等
现在请考虑运算符 &&
and ||
.
各种文档 (1-doc for or, 2-doc for and, 3-the MATLAB Programming Fundamentals ebook) 对此没有任何说明,help and
、help or
、help relop
也没有说明。
这也没有帮助:profile('on','-detail','builtin')
.
我能说的是 |
似乎被重定向到 or()
从下面的例子来看:
>> 1 || [0,0]
ans =
1
>> 1 | [0,0]
ans =
1 1
>> or(1,[0,0])
ans =
1 1
>> 1 && [0,0]
Operands to the || and && operators must be convertible to logical scalar values.
所以我的问题是:假设这是可能的 - 如何显式调用 &&
和 ||
的底层函数?
(注:本题涉及"how"的方面,不是[=60=])
不能有实现底层功能的函数。假设有一个实现此运算符的函数 scor
,然后调用 scor(true,B)
会在调用 scor
之前计算 B
,但运算符不会计算 B
。
显然可以定义 scor scor=@(x,y)(x||y)
,但它会计算大写的 B
。
/关于使用函数句柄的注释,这可能是一种解决方法:
%not printing a:
true||fprintf('a')
%printing a:
scor=@(x,y)(x||y)
scor(true,fprintf('a'))
%not printing a:
scor(true,@()(fprintf('a')))