我试图更好地理解语言“动态”的真正含义。我对Lingo有相当多的经验,它是 Adobe(以前的 Macromedia)Director 产品线的脚本语言,我只是想知道它是否会被视为“动态语言”。
处理变量和列表的方式对我来说似乎非常“动态语言”。
使用变量,您只需编写foo = 3
or bar = "Hello World"
。您没有将变量声明为 anint
或string
--it 按原样计算。
使用列表,您可以编写类似miscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]]
. 这不类似于 atuple
吗?
这些功能是否足以符合“动态语言”状态?
有趣的是,我使用 C# 的次数更多,而使用 Director/Lingo 的次数更少,但是这些天对动态语言的兴奋之情,我想知道我是否真的违背了规律。
编辑
关于 Mark Rushakoff 的回答,下面是使用此Wikipedia 文章分析 Lingo 是否符合“动态”条件的尝试:
Eval
- 行话有do
和value
关键字。do
将执行整个命令,例如,do "foo = 23"
或do "foo = sum(20, 3)"
。value
尝试将字符串转换为数字,但它不仅仅是一个解析运算符——它实际上可以将一个变量的字符串表示形式转换为它的数字,例如,假设foo = 23
,该语句value("foo")
将计算为 23。高阶函数——如果我理解正确的话,这基本上就是我在 C# 中被称为“代表”的东西。据我所知,Lingo 不直接支持这一点,尽管您可以创建一个具有函数的类型(称为“父脚本”)并传递该类型的实例。
闭包 - 据我所知,不支持这个。
继续——据我所知,不支持这个。
反思——至少在某种意义上,是的。您实际上是使用字符串创建类型的新实例,例如
fooInstance = script("Foo").new(bar)
. 也可以将类型的实例转换为包含类型名称的字符串(这样您就可以模仿 c# 的GetType()
功能)。您还可以在不知道属性名称的情况下查询类型的属性(例如,通过索引查找属性)并通过索引找出属性的名称。宏 - 维基百科文章描述宏的方式,我不这么认为。但是,可以在运行时编辑脚本,所以这可能很重要。
所以,看起来 Lingo 在动态特性上得分 2 到 3(满分 6 分),但我对闭包和延续还不够清楚,无法确定 Lingo 不支持它们。我想我不确定要得出什么结论。欢迎评论。