如何在MATLAB中调用短路逻辑运算符作为函数?
MATLAB运算符通常转换为函数形式,如以下示例所示:如何在MATLAB中调用短路逻辑运算符作为函数?,matlab,operator-overloading,logical-operators,low-level,short-circuiting,Matlab,Operator Overloading,Logical Operators,Low Level,Short Circuiting,MATLAB运算符通常转换为函数形式,如以下示例所示: ~A=>不是(A) A+B=>plus(A,B) A(…)=>subsref(…) A(…)=…=>subsasgn(…) 等等 现在请考虑运算符。 各种文档(1-、2-、3-)对此没有任何说明,也没有帮助和、帮助或、帮助重新加载。 这也没有帮助:profile('on'、'-detail'、'builtin') 我能说的是,|似乎被重定向到或() >> 1 || [0,0] ans = 1 &g
=>~A
不是(A)
=>A+B
plus(A,B)
=>A(…)
subsref(…)
=>A(…)=…
subsasgn(…)
- 等等
现在请考虑运算符。
各种文档(1-、2-、3-)对此没有任何说明,也没有帮助和
、帮助或
、帮助重新加载
。
这也没有帮助:profile('on'、'-detail'、'builtin')
我能说的是,|
似乎被重定向到或()
>> 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.
所以我的问题是:假设这是可能的-如何显式调用&&
和|
的底层函数?
(注意:这个问题涉及的是“如何”,而不是“为什么”)不可能有一个函数实现底层功能。假设有一个实现此运算符的函数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')))
我怀疑AND的函数式调用可以避免执行参数。@Dev-iL:如果您想要的函数形式,您必须使用带有模型的语言。@Amro-您可能知道MATLAB提供了某种形式的参数(例如,如Daniel的回答所示)。尽管如此,我还是要感谢你的洞察力。顺便说一句,&&&
和| |
是MATLAB确实具有惰性评估功能的“活生生的证明”。。。问题是,为什么我们不能将所说的MATLAB功能轻松地用于其他事情?而且,sAND(@()expr1,@()expr2,…)
可能是最接近的了。@knedlsepp:我想起了几年前在Loren Shure的博客上介绍的,这是MATLAB@Dev-iL:逻辑短路运算符&&
和| |
没有函数形式,出于充分的理由。。。在调用此类函数之前,必须对参数进行求值,这会破坏函数的功能。也许内置('&&',a,@()b)
?@Dev iL:安装Matlab时,您似乎希望得到Haskell;-)顺便说一句——我刚刚注意到SO建议了以下内容,我认为这些内容非常有用。(我接受这个答案的前提是,杰出的Daniel和@Amro不适合:)