Open aceyin opened 1 year ago
直接写 function math.XXX() end
可以是可以, 但是如果 后续版本的 Lua 的 math 模块也增加了一个 XXX 方法, 那修改现有代码中调用 XXX 的地方就会很麻烦了, 就没法简单通过 rename XXX 成 XXX2 的方式来进行重构了。因为我不知道调用 XXX 的地方, 到底是想调用 官方的 XXX 还是我的 libs.math 里面的 XXX。
调用的一定是你自己的XXX, lua的所有自有函数都可以被覆盖和重写,你覆盖了这个实现以后无论lua本身是否提供都会是你自己的实现
调用的一定是你自己的XXX, lua的所有自有函数都可以被覆盖和重写,你覆盖了这个实现以后无论lua本身是否提供都会是你自己的实现
哎, 不好说。。 程序是工作在一个多 Lua 虚拟机的环境里面的 (skynet) 假设我在 libs.math 里面定义了 XXX , 覆盖了 Lua 官方的 math.XXX 但是如果我一些 Lua 虚拟机, 没有 require 'lib.math' 这时调用的 math.XXX() 就是官方的 但假设哪天别的同事 require 了 libs.math 或者其他模块间接 require 了 libs.math 那以前调用 math.XXX() 的那些代码, 就出 bug 了。
math 和require 'math'是同一张表
以 math.lua 举例:
emmy-lua 中的
math
模块源码如下:因为没有给
math = {}
加上@class
申明, 因此当我想扩展lua标准库的math
模块的时候,例如:我想写一个
libs.math
库,用来在原有std.match
基础上扩充一些功能: file: libs/math.lua当我使用上述模块时,IDE 就没法提示出标准库的 math 模块的函数.
建议给标准库中的一些模块, 如: math, table, string 什么的, 都加上 @class 注解, 如:
@class std.match
,@class std.table
,@class std.string
这样的话, 对于想扩展标准库的时候, 就能享受 std 库里面的 IDE 语法提示