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

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/Terrypython/p/9496684.html.net