【问题标题】:Matlab statement is not inside any function errorMatlab语句不在任何函数内错误
【发布时间】:2018-11-13 05:30:18
【问题描述】:

这是我正在尝试执行的一个简单的 Matlab 代码。

function result = scale(img, value)
    result = value .* img;
end

dolphin = imread('dolphin.png')
imshow(scale(dolphin, 1.5));

错误提示:

Error: File: scale.m Line: 5 Column: 1 This statement is not inside any function. (It follows the END that terminates the definition of the function "scale".)

我在这里做错了什么?

【问题讨论】:

  • scale 是 matlab 中已有的函数名。您应该尝试使您的函数名称更加独特,这样您就不会与现有函数重叠。
  • @Hojo.Timberwolf,我已将 scale.m 文件重命名为 myFunction.m。仍然出现同样的错误。

标签: matlab function image-processing


【解决方案1】:

scale.m 是一个函数 M 文件,因为它以关键字 function 开头。 end 之前的部分是函数的定义。当您在 MATLAB 命令行中调用 scale 时,它会执行函数中的代码。 end 之后的内容不是函数的一部分,因此无法执行。

如果您打算编写一个带有私有函数scale 的脚本,并且只想在该脚本中使用,那么将读取和显示dolphin 的代码行放在文件顶部。私有函数应该在脚本部分之后。支持此语法since MATLAB R2016b

否则,请将dolphin 代码移动到不同的 M 文件,这将是一个没有任何函数定义的简单脚本 M 文件。然后这个脚本可以使用scale,它会调用文件scale.m中的函数。

第三种选择,将所有代码保存在同一个文件中,根本不使用脚本,并将脚本代码放在函数中:

function f % just a random name
   dolphin = imread('dolphin.png')
   imshow(scale(dolphin, 1.5));
end

function result = scale(img, value)
   result = value .* img;
end

(函数名不需要与文件名匹配,尽管如果这些名称不匹配,MATLAB 编辑器会警告您。)

【讨论】:

  • 我已将dolphinimshow 部分移至顶部。现在错误说,Error: File: scale.m Line: 4 Column: 7 Function definitions are not permitted in this context.
  • @opu웃:您使用的是旧版本的 MATLAB 吗?如果是这样,您将不得不做第二种选择:一个文件用于脚本部分,一个文件用于函数。或者将脚本变成一个函数(即在文件顶部添加function f,然后写入dolphin 行,然后是end,然后在底部添加scale 函数)。
  • 我已将dophinimshow 部分移至另一个m 文件。它奏效了!我正在使用Matlab R2016a
  • 第三种选择对我不起作用。错误说,Error: File: scale.m Line: 6 Column: 19 Function with duplicate name "scale" cannot be defined.
  • @opu웃:有趣的是,我没想到 MATLAB 会这样做。我想,MATLAB 的困惑来自文件和具有相同名称的私有函数。如果是这样,重命名文件或重命名函数将修复它。
猜你喜欢
  • 1970-01-01
  • 2020-07-25
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多