通过什么语言设计原则,字符串在 GNU Octave 中被实例化为字符串或变量?

By means of what language design principle is a string instantiated either as a string or as a variable in GNU Octave?

有一个 Octave 脚本(在动态语言的意义上 heremove.m 定义 function move(direction),它可以从不同的另一个脚本(或者从命令行)调用方式:move leftmove('left')move(left)。虽然前两个将使用字符串 'left' 实例化 direction,但最后一个将 left 视为变量。

问题是关于这背后的语言定义中的形式原则。我知道在第一种模式下,脚本作为命令调用,考虑到命令行的其余部分只是数据,而不是变量(与 Linux 提示符非常相似);而在最后两个中,它被称为函数,将后面的内容(括号之间)解释为数据或变量。如果这是脚本语言中的通用设计标准,其背后的原理是什么?

I understand that in the first mode, the script is invoked as a command [...]

就 Octave 而言,您最好忘记这种区别。我不确定 "command" 是否曾经存在过,但现在肯定不存在了。命令语法只是 Octave 中的语法糖。使交互式绘图调整更简单,因为它的函数参数主要采用字符串。

为了回答您的问题,是的,这是设计使然,它是 matlab(因此是八度音阶)为 运行 期望 的某些函数提供的语法糖字符串参数。这是 matlab 手册中的相关部分:https://uk.mathworks.com/help/matlab/matlab_prog/command-vs-function-syntax.html

虽然我应该澄清一些误解。首先,这不是 "data" 与 "variables"。命令语法中提供的任何参数都被简单地解释为字符串。所以这两个是等价的:

fprintf("1")
fprintf 1

即在fprintf 1中,1不是数字数据。是字符串。

其次,并不是所有m个文件都是"scripts"。你把你的 m 文件称为脚本让我有些困惑。您的特定文件仅包含一个函数定义,所以它是一个函数,100%。

这在这里很重要的原因是,所有函数都可以通过函数语法或命令语法调用(只要它在预期参数是字符串方面有意义),而脚本不带参数,所以没有功能/命令语法在起作用,如果您将 'arguments' 传递给脚本,那您就做错了。