标签: lua

使用Luabind处理事件回调

我正在将Lua脚本添加到我们的应用程序中,我需要为GUI工具包实现绑定.我们使用的工具包是wxWidgets.

我正在使用Lua 5.1和luabind 0.9.1,到目前为止它运行良好.但是,我不确定如何最好地处理事件.例如,如果要在单击时创建按钮并打印字符串,则可以在C++中编写类似的内容

class MyClass : public wxFrame
{
    MyClass (...)
    {
        b = new wxButton (this, -1, "Click me");
        b->Bind (wxEVT_COMMAND_BUTTON_CLICKED, &MyClass::HandleButtonClick, this);
    }

    void HandleButtonClick (wxCommandEvent& ev)
    {
        wxMessageBox ("You clicked me");
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Lua做同样事情的梦想API看起来像这样:

b = wx.Button (frm, -1, "Click me")
b.on_click = function (ev)
    print ("Button clicked")
end
Run Code Online (Sandbox Code Playgroud)

或者,允许多个事件处理程序:

b.on_click:add (function (ev)
    print ("Button clicked again ...")
end)
Run Code Online (Sandbox Code Playgroud)

如果不可能,这样的东西更类似于C++ API:

b.bind (wx.EVT_COMMAND_BUTTON_CLICKED, function (ev)
    print ("Yet again")
end)
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何使用Luabind实现这一点,而不为我想要使用的wxWidgets-library中的每个类编写包装类.

有什么建议?

或许Luabind可以通过某种方式自动创建辅助类(比如说"wxLuaEventPropagator")吗?因此,wxButton类为每个事件都有一个嵌套的wxLuaEventPropagator类("on_click",依此类推).再一次,我不想为我使用的wxWidgets中的每个类创建包装类,因为有一吨.

(是的,我知道wxLua)

c++ lua luabind

27
推荐指数
1
解决办法
1998
查看次数

一行多个当地人?

考虑以下Lua代码:

local var1, var2;
Run Code Online (Sandbox Code Playgroud)

这是var2一个局部变量吗?或者只是var1当地人?

syntax lua

26
推荐指数
2
解决办法
6782
查看次数

在Lua中将字符串中的所有字符设置为小写

这就是事情.我试图在Lua中以小写字母转换字符串,但它不起作用.我做到了这一点

String = String:lower()
Run Code Online (Sandbox Code Playgroud)

但它不喜欢它.我确信这是做到这一点的方式,我以前见过它.一些网站认为这可能是由错误版本的解释器引起的问题.

有任何想法吗?

string lua lowercase

26
推荐指数
1
解决办法
3万
查看次数

如何检查两个Torch张量或矩阵是否相等?

我需要一个Torch命令来检查两个张量是否具有相同的内容,如果它们具有相同的内容则返回TRUE.

例如:

local tens_a = torch.Tensor({9,8,7,6});
local tens_b = torch.Tensor({9,8,7,6});

if (tens_a EQUIVALENCE_COMMAND tens_b) then ... end
Run Code Online (Sandbox Code Playgroud)

我应该在这个脚本中使用什么而不是EQUIVALENCE_COMMAND

我试过简单,==但它不起作用.

lua torch

26
推荐指数
4
解决办法
2万
查看次数

Lua字符串替换

我该怎么办?

我懂了:

name = "^aH^ai"
string.gsub(name, "^a", "")

应返回"Hi",但它将插入符号作为模式字符

这将是一个什么样的解决方案?(必须在gsub中完成)

string lua replace gsub lua-patterns

25
推荐指数
1
解决办法
8万
查看次数

Lua中的userdata和lightuserdata是什么?

  • Lua中的userdata和lightuserdata是什么?
  • 我在哪里需要它?

我一直试图绕过它一段时间,但我似乎找不到任何我真正理解的教程/解释.

你为什么需要它们,为什么不能直接将C函数绑定到Lua metatables?

lua

25
推荐指数
2
解决办法
2万
查看次数

在C++中嵌入Lua

我一直试图将lua嵌入到c ++应用程序中,但由于编译器抱怨"lua_open"而无济于事.我正在使用Lua 5.2.

我发现很多文章声称lua_open()在第五版中被替换了,但没有一个提到什么.

这是我试图编译的代码

extern "C" {
#include "../lua/lua.h"
#include "../lua/lualib.h"
#include "../lua/lauxlib.h"
}

int main()
{
    int s=0;

    lua_State *L = lua_open();
    // load the libs
    luaL_openlibs(L);
    luaL_dofile(L,"example.lua");
    printf("\nDone!\n");
    lua_close(L);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ lua embedding undefined

25
推荐指数
1
解决办法
2万
查看次数

Lua需要以逗号分割

我用谷歌搜索,我只是没有得到它.看起来像这么简单的功能,但当然Lua没有它.

在Python中,我会这样做

string = "cat,dog"
one, two = string.split(",")
Run Code Online (Sandbox Code Playgroud)

然后我会有两个变量,一个=猫.两个=狗

我如何在Lua中做到这一点!?

lua split match

25
推荐指数
4
解决办法
5万
查看次数

我该怎么做才能提高Lua程序的性能?

我问了一个关于Lua性能的问题,并询问了回答:

你有没有研究过保持Lua性能高的一般技巧?即知道表创建而不是重用表而不是创建新表,使用'local print = print'等来避免全局访问.

这是一个与Lua模式,提示和技巧略有不同的问题,因为我希望答案能够特别影响性能,并且(如果可能的话)解释为什么性能会受到影响.

每个答案一个提示是理想的.

optimization performance lua

24
推荐指数
2
解决办法
2万
查看次数

23
推荐指数
4
解决办法
6974
查看次数