【问题标题】:Why set underscores equal to a function?为什么设置下划线等于函数?
【发布时间】:2023-04-10 16:04:01
【问题描述】:

我已经在网上和其他地方搜索过答案,但所有主题都涉及迭代表、元表或_,var1 = do_some_stuff() 的时间,而这里不是这种情况。

这只是一个不现实的功能,但包含我的意思的示例:

function do_some_stuff(data)
    _ = some_function(data)
    some_other_code
    _ = some_other_function(data)
end

这不就等同于直接输入吗:

function do_some_stuff(data)
    some_function(data)
    some_other_code
    some_other_function(data)
end

我知道,如果我创建一个这样的基本 Lua 程序,两个版本的运行方式相同:

function hello(state)
    print("World")
end

function ugh(state)
    _ = hello(state) -- and w/ hello(state) only
end

ugh(state)

我只是想知道是否有必要使用此_ = some_function()

【问题讨论】:

  • 你看到_ = some_function()还是看到_, val = some_function()?因为后者实际上意味着什么并且是必要的。
  • @EtanReisner 你是完全正确的,我理解我会使用后者的时候。不,情况并非如此,但我会根据您的问题进行更新。谢谢!
  • 我想不出_ = some_function()完全有意义的情况(这不是perl),但我不能完全肯定地说这是没有意义的(尤其是因为我没有'根本不关注 lua 5.2 或 5.3)。
  • @EtanReisner 感谢 Etan。从我到目前为止的尝试来看,我没有看到任何区别。但我绝不像这里的许多成员那样知识渊博或经验丰富。谢谢
  • setmetatable(_G,{__newindex = function(_,n, v) if n == '_' then print('...') end end}) :) 我认为唯一的副作用是覆盖全局/上值。我看到使用下划线作为合法值的代码。

标签: variables lua metasyntactic-variable


【解决方案1】:

在您编写的示例中,_ 毫无意义。一般来说,_ 在函数返回多个值时使用,并且您不需要所有返回的内容。可以这么说,一个一次性变量_

例如:

local lyr, needThis = {}
lyr.test = function()
    local a, b, c;
    --do stuff
    return a, b, c
end

可以说,对于这样一个返回多个值的函数,我只需要第三个值来做其他事情。相关部分是:

_, _, needThis = lyr.test()

needThis 的值将是函数lyr.test() 中返回的c 的值。

【讨论】:

  • 感谢您的示例。我理解你为什么会在你的例子中使用它。如果您从一个函数接收大量变量,并且您只想在调用它的给定函数中使用特定数量的变量。但是这里发生的情况是它所在的函数没有返回任何变量。它只是触发该函数运行,例如我的帖子中的print。我希望这是有道理的?哈哈
【解决方案2】:

_ = do_some_stuff() 没有任何好处,而使用do_some_stuff() 很好,也更容易接受。以这种方式使用下划线没有任何好处。

感谢 Etan Reisner 和 Mud 的帮助和澄清。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2011-03-05
    • 2018-12-22
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多