• 燕羽阳
    2019-07-01
    lua指令是32位,其中6位作为操作码,8位作为本地变量和upvalue寻址(即256个)。类似的限制还有函数中只能定义262144个常量(2^18)

    作者回复: 👍 这些设计到 Lua 虚拟机指令,感兴趣的同学推荐看看张秀宏老师写的《自己动手实现Lua:虚拟机、编译器和标准库》

    
     2
  • 回家
    2019-06-26
    为什么table的下标是数字时,设置弱表属性是key,不会对其进行垃圾回收,而是table和function时会对其进行垃圾回收?
    
     1
  • 回家
    2019-06-26
    开篇讲解弱表的例子中,如果table中有对Foo的引用,不是说明Foo占用的内存是有用的吗?为什么要释放Foo占用的内存?什么时候会对其进行了引用,反倒希望设置弱表属性,希望GC对其进行垃圾回收呢?
    
     1
  • 宝仔
    2020-02-04
    老师,我通过resty -e 去测试的时候发现upvalue是有60的限制,但是我用相同的代码通过lua test.lua这种运行方式去测试,发现upvalue没有60限制,函数内部的局部变量两种运行方式到是都有200限制的。
    lua环境如下:
    $ lua -v
    Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
    openresty环境如下:
    $ resty -v
    resty 0.23
    nginx version: openresty/1.15.8.1
    built by clang 10.0.0 (clang-1000.10.44.4)
    built with OpenSSL 1.1.0j 20 Nov 2018
    这是因为luajit和lua的原因吗
    展开
    
    
  • fjpcode
    2019-08-09
    既然函数是一等公民,和变量一样,那么在一个函数中调用另一个函数是否也属于闭包的范畴。全局变量是否也属于upvalue。
    
    
  • 英雄
    2019-07-11
    local t = cjson.empty_array
    这行代码没看懂

    作者回复: 这是把 cjson 这个模块的 empty_array 函数,赋值给了 t 这个变量。在 Lua 中函数是一等公民,可以像变量一样使用

    
    
  • Leon📷
    2019-07-09
    coroutine 0:
      /usr/local/openresty/nginx/lua/hello.lua: in main chunk, client: 127.0.0.1, server: localhost, request: "GET /lua HTTP/1.1", host: "localhost"
    2019/07/09 14:21:09 [error] 854136#854136: *16 lua entry thread aborted: runtime error: /usr/local/openresty/nginx/lua/hello.lua:17: attempt to index global 'cjson' (a nil v
    stack traceback,老师,这个是怎么回事
    展开

    作者回复: 能否贴下具体的代码?给个 github 的 gist 地址就行

    
    
  • 小飞哥 ‍超級會員
    2019-07-02
    上面有个例子, 发现是有两个结果的, 一个是2, 另一个结果是空, 而例子只列出一个结果, 而 第一个print 才是2, 第二个print 是空。

    localhost: ~/geektime/lua $ resty -e '
    > local function foo()
    > local i = 1
    > local function bar()
    > i = i + 1
    > print(i)
    > end
    > return bar
    > end
    > local fn = foo()
    > print(fn())
    > '
    2
    展开
    
    
  • 回家
    2019-06-26
    老师,typo:”即使这个变量并不在 foo 里面定义“,应该是”即使这个变量并不在 bar 里面定义“~~

    作者回复: 多谢反馈,已经修改:)

    
    
  • soooldier
    2019-06-24
    看完后对week table还是完全懵的,有没有更浅显易懂的文章呢?

    作者回复: 可以看 Lua 作者写的那本书,就是《Lua 程序设计》,里面专门有讲 weak table

    
    
  • 小飞哥 ‍超級會員
    2019-06-22
    写在最后的do end 是不是表示代码块的意思?
    do end封装后是不是其它function是无法访问的?

    作者回复: 是的,除非你在 do end 之前预定义了一个变量,比如:
    local f
    do
    function f()
    ...
    end

    end -- do

    
    
  • 一步
    2019-06-22
    local cjson = require('cjson')
    local tb1 = {}
    setmetatable(tb1, cjson.empty_array_mt)
    print(cjson.encode(tb1))
    tb1['key'] = '11'
    print(cjson.encode(tb1))

    老师这样写之后打印出来 4个 [] 空数组,最后那个那个不是赋值了吗? 为什么还是空数组呢?
    展开
    
    
  • 罐头瓶子
    2019-06-21
    upvalue 上线250这个是考虑到变量查找效率的问题?如果local变量过多可以放在table里面加快查找效率?

    作者回复: 其实上限是 256, 这个是 Lua 虚拟机的指令占用的大小决定的。超过 256 的话,Lua 虚拟机就不支持了。

    
    
  • helloworld
    2019-06-21
    老师,我这么理解对不对:
    OpenResty的API包括Nginx API和LuaJIT API,Nginx API主要是lua-nginx-module等*-nginx-module C模块提供的API,而LuaJIT API主要是lua-resty-*各种Lua库所提供的API
    
    
  • helloworld
    2019-06-21
    老师,文中提到的OpenResty的API和LuaJIT的API,你看我这么理解对不对:
    OpenResty的API,是指lua-nginx-module模块提供的API
    LuaJIT的API,是指lua-resty-core和各种lua-resty-*项目中提供的API

    作者回复: OpenResty 的 API 指的是lua-nginx-module和lua-resty-core提供的接口,都是 `ngx` 来头的;LuaJIT 的 API 是扩展了 Lua 内置的库,比如 `table.new` 这种

     1
    
  • xindoo
    2019-06-21
    我立即lua中的弱表和java中的WeakHashMap类似
    
    
  • 一步
    2019-06-21
    当 __mode = k 时 ,table 的键k是弱引用, 这句话不知道怎么理解, 键也可以计数吗? 键也可以弱引用吗?
    table 的 值 v是弱引用, 可以理解的, 当回收的时候 赋值为 nil
    
    
  • 一步
    2019-06-21
    lua weak table 可以类比 js 的 weak set ,其中的元素不会加入引用计数,当元素没有其他引用的时候,就会被 gc 掉
    
    
我们在线,来聊聊吧