面向对象的Lua有多安全?

Lua 新手,在研究 Lua。我的问题是:由于 Lua 中的对象仅是表,可以在运行时添加新字段。假如在代码中出现拼写错误,我创建了一个新字段而不是更改字段,那么这不会带来混乱吗?;) 只有在运行时才能找到 bug,如果我能在程序中到达那一点的话。 (当然,表概念还具有其他好处,如元编程而无需反射,但我的问题是“安全性”或可预测性。)这是正确的结论吗?

点赞
用户857807
用户857807

是的,没错。

当使用动态类型语言时,你需要一个广泛的单元测试套件,来确保你覆盖了所有可能的情况,防止你所描述的混乱情况发生。

如果你想保护自己免受这种情况的影响,我建议看看静态类型语言,比如Java,C#或Scala,并让编译器为您执行类型检查。

这就是为什么Twitter从Ruby转向Scala的原因-随着项目的发展,使用动态类型语言只能在运行时验证的错误变得越来越难跟踪-但静态语言编译器可以在编译时验证。


动态类型语言基于鸭子类型:

如果它走起来像一只鸭子,叫起来像一只鸭子,那就是一只鸭子

我喜欢这个版本:

如果它走起来像一只鸭子,叫起来像一只鸭子,那它很可能会在运行时抛出异常。

2013-12-15 09:29:31
用户204011
用户204011

Lua提供了机制,使您至少具有其他动态编程语言具有的内置对象模型的安全性。例如,请参见此处

但是,错误仍只会发生在运行时,因此您需要具有良好覆盖率的测试套件。

有一些项目致力于向Lua添加静态类型。创建metalua的Fabien Fleutot在最新的Lua研讨会上展示了他的项目。请参见:

2013-12-15 18:25:11