【问题标题】:Calling functions from inside (Matlab) code sections [closed]从内部(Matlab)代码部分调用函数[关闭]
【发布时间】:2018-03-02 15:46:47
【问题描述】:

我有一个庞大的脚本,其中包含许多彼此独立运行的代码部分。对于其中一些代码段,有很多重复的代码,所以我想定义一个函数,我可以从给定的代码段多次调用。但是,我要么收到错误“在此上下文中不允许函数定义。”,或者,一旦代码执行到达函数调用,它就会说函数未定义。

因此,Matlab (2016b) 似乎不接受在代码部分中定义的函数,或者我正在做其他错误的事情。

我尝试了什么:

  • 将整个脚本定义为一个函数,名称与包含的 .m 文件的名称完全相同,并在最后一行带有相应的“end”

  • 在与其相关的代码部分的末尾定义包含我的重复代码的函数

  • .. 或在文件末尾(最顶层函数自己的“结束”之前)

  • .. 或在文件末尾(在最顶层函数自己的“end”之后)

我的代码组织可能会受到批评,例如我可能会在我的文件中使用多个函数,而不是脚本样式的代码部分。但是,我想知道是否有一种方法可以从内部代码段调用函数。

【问题讨论】:

  • 如果您希望能够独立运行单元格,最好的方法可能是在单独的文件中定义函数(文件名=函数名+“.m”)。函数文件需要位于工作目录或 MATLAB 路径中。是否有某些原因这对您不起作用?
  • 你是对的。为了方便起见,我一直试图将所有代码保存在同一个文件中,但我准备接受这可能不可行:)

标签: matlab function nested code-separation


【解决方案1】:

您需要阅读以下文档:

值得注意的是,第二个包含相关信息:

从 R2016b 开始,存储函数的另一个选项是将它们包含在脚本文件的末尾。

您说您使用的是 R2016b,因此您可以在脚本中定义函数,但它们必须位于文件末尾。该文档包含以下包含函数的有效脚本示例:

x = 3;
y = 2;
z = perm(x,y)

function p = perm(n,r)
    p = fact(n)*fact(n-r);
end

function f = fact(n)
    f = prod(1:n);
end

【讨论】:

  • 函数定义仅在您从命令行运行脚本时才起作用,OP 没有这样做(除非我误解了)。
  • 您如何运行脚本以使该方法失败?您可以从命令行或其他脚本运行脚本(带有或不带有本地函数),或者在编辑器中按 Run / F5 ...
  • 我猜 OP 正在使用 MATLAB IDE 中的 Ctrl-Enter 来运行单个单元格。但也许我看错了
  • 谢谢@Wolfie。我认为您提到的案例并非特定于细胞,这似乎是导致问题的原因
  • 在这种情况下,verbatross 对您的问题的评论是正确的,您只需要重组您的代码。 ctrl+enter 用于快速运行和调试,而不是您用于运行代码的主要机制...将您的函数分成不同的 m 文件,然后如果您愿意,您可以将主体作为部分运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 2017-03-05
  • 2014-10-01
  • 1970-01-01
  • 2016-08-15
相关资源
最近更新 更多