【问题标题】:Matlab: How to override intrinsic function with variable in workspaceMatlab:如何用工作区中的变量覆盖内在函数
【发布时间】:2016-11-16 20:14:01
【问题描述】:

我想知道在运行 m 文件时如何使用在 Matlab R2015a 的工作区中定义的变量覆盖内部函数。

我的意思是如果我定义:

function test
fun1
clear input
load test
plot(input)
return

function fun1
input=1:10;
save('test.mat','input')
return

我运行测试,然后我得到:

Error using input
Not enough input arguments.

Error in test (line 8)
plot(input) 

Matlab 将输入作为其内置函数。

你知道如何解决这个问题(不改变变量名)吗?

谢谢。

【问题讨论】:

  • 您永远不应该覆盖内置函数。 (为避免此类错误)
  • 但是如果你创建一个变量或一个新的.m文件与一个内置函数的名字完全相同,这个内置函数将被“覆盖”。
  • @obchardon 我不同意。如果您知道自己在做什么,那么这样做绝对没有问题 - 例如在为自定义类重载运算符时(plus() 等)。 MATLAB 甚至提供了builtin 函数(“从重载方法执行内置函数”),以便在需要时调用原始版本。 || cardogar - 使用load“生成变量”是不好的做法。一个更好的方法是A=load(...); var = A.someName,这对于 mlint 和人类来说都不太容易混淆。
  • @obchardon 如果加载变量,则不会覆盖内置函数。非常感谢 Dev-iL 可以轻松解决我的问题,因为我无法在实际问题中更改 mat 文件。
  • @cardogar 我很糟糕,我正在使用覆盖内置函数的八度音程

标签: matlab workspace


【解决方案1】:

指定确切的文件名,包括扩展名。 并且更好地使用将接受输入的变量。

function test
    fun1
    clear input
    data=load('test.mat');
    plot(data.input)
    return
end   
function fun1
    input=1:10;
    save('test.mat','input')
    return
end

如果你想使用相同的数据结构,你可以使用:

data.input=1:10;
save('test.mat','-struct','data')

【讨论】:

    【解决方案2】:

    @Dev-iL 在 cmets 中给出了解决方案

    最好不要将变量生成为工作区中的存在变量。

    所以这将使上面的简单示例起作用:

    A=load('test.mat');
    input=A.input
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-18
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2011-02-15
      • 2017-08-26
      • 1970-01-01
      相关资源
      最近更新 更多