错误: 此上下文中不允许函数定义。

1 为了搞清这个问题,我们先来了解一下matlab编译运行代码的几种方式。

  • 在脚本编辑器中编写,全选后右键执行所选内容。使用这种方式编译运行,无非就是将选中的代码一行一行放到命令行中运行,这种方式,便于程序的调试,也是我常用的方式。
  • 在编辑器中编写完成后,摁F5键保存运行。这种运行方式,其实上相当于在命令行窗口中输入文件名运行,所以要先保存。这种方式适用于不带输入参数的程序以及运行。将文件拖入命令行,也能达到相同的效果。
  • 直接在命令行窗口输入文件名(不是函数的文件,或传入参数没有用到或者函数体内定义了的函数)或函数名(最好与文件同名)及其传入参数运行。这种运行方式的机理同上一个。

后两种运行方式最大的优点就是可在单文件中定义供自身调用的函数,而无需另外编写m文件保存。最大的缺点是不利于单行的调试。

2 知道了程序的几个简单的运行方式后,我们来简单了解一下matlab程序运行机制。

  • 对于逐行解析运行的方式,毋庸多说,当在文中碰到function定义的函数时,会告诉你“此上下文中不允许函数定义”。这时候,你需要将一个一个函数单独写成m文件。
  • 对于命令行调用文件的运行方式,matlab会将文件进行识别成两类文件,非函数文件和函数文件。当文件开头就开始定义函数时,matlab将此文件识别为函数,那么文中的第一个函数将被视为该文件对应的函数(主体函数,优先运行),而文中定义的其他函数,此时视为可在文中互相调用的附属函数。这个“函数调用文中函数”机制允许我们在文中定义函数。当文件开头不是以“function”定义的函数时,文件被识别做非函数,则逐行解析运行,若下文有函数定义,则报错。

注:简而言之,只有在定义函数文件时,才能在本文中调用其他文件,而不需另外的m文件来定义函数。

值得一提的是,选中逐行运行的方式除了有便于调试的优点,还避开的调用法运行时文件一定要英文名的缺点,并且运行时不需要先保存文件,十分方便。习惯性这样操作,平时编写程序还是多拆几个m函数文件,最后为了美观整合的时候,可以利用函数可调用函数的机制,整合成一个文件。但常用到的函数,最好能单独出来,因为函数文件中的附属函数,只能在该函数文件中调用。

参考:https://blog.csdn.net/lusongno1/article/details/54018723

posted @ 2018-08-18 11:40  珠峰上吹泡泡  阅读(33565)  评论(0编辑  收藏  举报