可否对标准库的模块, 加上 @class 注解
以 math.lua 举例:
emmy-lua 中的 math 模块源码如下:
math = {}
function math.abs(x) return 0 end
....
因为没有给 math = {} 加上 @class 申明, 因此当我想扩展lua标准库的 math 模块的时候,例如:
我想写一个 libs.math 库,用来在原有 std.match 基础上扩充一些功能:
file: libs/math.lua
--- @class libs.math : <因为标准库的 math 没有申明 class, 所以我这里就没法继承>
local m = setmetatable({}, {__index=math})
return m
当我使用上述模块时,IDE 就没法提示出标准库的 math 模块的函数.
建议给标准库中的一些模块, 如: math, table, string 什么的, 都加上 @class 注解, 如:
@class std.match, @class std.table, @class std.string
这样的话, 对于想扩展标准库的时候, 就能享受 std 库里面的 IDE 语法提示
直接写 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'是同一张表