【问题标题】:How to declare variables with a type in Lua如何在 Lua 中声明具有类型的变量
【发布时间】:2013-12-15 12:56:41
【问题描述】:

是否可以在 Lua 中创建特定类型的变量?

例如int x = 4

如果这是不可能的,是否至少有某种方法可以在变量之前显示一个假的“类型”,以便任何阅读代码的人都会知道该变量 应该是什么类型

例如function addInt(int x=4, int y=5),但是 x/y 仍然可以是任何类型的变量吗?我发现在变量之前键入变量的类型要比在函数上方添加注释让任何读者知道它应该是什么类型的变量要容易得多。

我要问的唯一原因不是将变量限制为特定的数据类型,而只是为了能够将数据类型放在变量之前,无论它有什么作用,让读者知道它应该是什么类型的变量而不会出错。

【问题讨论】:

    标签: oop variables types lua


    【解决方案1】:

    您可以使用 cmets 做到这一点:

    local x = 4 -- int
    
    function addInt(x --[[int]],
                    y --[[int]] )
    

    您可以使用以下方法使您的其他评论中的语法 a = int(5) 起作用:

    function int(a) return a end
    function string(a) return a end
    function dictionary(a) return a end
    
    a = int(5)
    b = string "hello, world!"
    c = dictionary({foo = "hey"})
    

    不过,这并没有比评论带来任何好处。

    【讨论】:

    • “我发现在变量之前键入变量的类型比发表评论要容易得多......”我知道我可以发表评论,正如我的帖子中所述——我只是想知道如果变量之前有“假”数据类型是可能的。
    • @EchoFive 我的示例旨在表明您可以使用严格的格式。您的建议暗示了类似--[[ this function takes a couple ints ]] function addInt(x, y) 的内容,而我在某种程度上扩展了语法:function addInt( --[[int]] x, --[[int]] y)
    • @EchoFive 只需检查Lua grammar 就会告诉您,您可以在这些位置插入唯一的 cmets。
    【解决方案2】:

    我能想到的唯一方法是在 C 中创建自定义类型。

    Lua Integer type

    【讨论】:

    • 我知道每个变量都有一个类型,但是有没有办法在变量名前加上一些东西而不会导致错误,比如 foo x = 5?我不需要假的“类型”来做任何事情,但我想把它放在那里,这样我就知道当我查看我的函数时我的变量应该是什么类型。抱歉,如果我在帖子中不清楚。
    • 谢谢!我发现您链接的线程的 OP 使用了 a = int(5),这实现了我想要做的。我不一定需要将类型放在变量名之前——我只是希望它在那里显示类型以供参考。
    • 在 Lua 中创建自定义类型不会改变语法。该线程是关于创建具有自定义行为的新类型,但变量与以往一样无类型。但是,如果语法 a = int(5) 是可以接受的,那么在不制作自定义类型的情况下就可以轻松完成这项工作。 @EchoFive
    • @bames53 是的,但是 int 确实是一个整数,而不是浮点数,也许 OP 也想要这个。
    【解决方案3】:

    没有。但我了解您的目标是在阅读和编写函数调用时提高理解力。

    说明参数的预期数据类型在给出函数规范方面只增加了一点点。此外,一些函数参数是多态的,接受一个特定的值,或者一个函数或表,从该函数或表中获取函数运行的上下文的值。例如,请参阅string.gsub

    在读取函数调用时,调用站点唯一知道的是其值作为函数调用的变量或字段的名称(有时读取为函数的“名称”)和传递的表达式作为实际参数。有时将参数表达式重构为命名的局部变量以增加可读性会很有帮助。

    在编写函数调用时,函数的名称是关键。形式参数的名称也很有帮助。但是,名称(如类型)仍然不构成规范。最大的帮助来自与 IDE 结合使用的嵌入式结构化文档,该 IDE 可以推断名称的上下文并执行内容辅助和可用文档的演示。

    luadoc 就是这样一种文档系统。您可以为您声明的函数编写 luadoc。

    Eclipse Koneki LDT 就是这样一个 IDE。由于 Lua 的动态特性,这是一个难题,因此 LDT 并不总是像人们希望的那样有用。 (需要明确的是,LDT 不使用 luadoc;它发展了自己的嵌入式文档系统。)

    【讨论】:

      猜你喜欢
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2014-10-02
      • 2018-12-16
      • 2012-07-14
      • 2015-04-28
      • 1970-01-01
      相关资源
      最近更新 更多