gpt4 book ai didi

lua - 如何创建一个函数来返回传递给它的第一个非零、非空字符串?

转载 作者:行者123 更新时间:2023-12-01 09:16:29 24 4
gpt4 key购买 nike

我正在尝试实现一个函数,该函数从传递给它的变量中返回第一个非空白字符串。不幸的是,其中一些变量可能是 nil,所以天真的方法

function first_non_empty(...)
for i, item in ipairs({...}) do
if item ~= nil and item ~= '' then
return item
end
end
return ''
end

不起作用:ipairs 在遇到 nil 值时立即退出。这可以通过更改要求以使变量不能为 nil 或通过将长度传递给函数以使表长度不必依赖 ipairs 或通过包装所有参数来解决在一个函数中,使它们都不是显式 nil

function first_non_empty_func(...)
for i, func in ipairs({...}) do
local item = func()
if item ~= nil and item ~= '' then
return item
end
end
return ''
end

function fn(p)
local f = function() return p end
return f
end

-- change callers to first_non_empty_func(fn(a), fn(b), fn(c))

但是,这两种解决方案都使函数原型(prototype)复杂化。是否存在一个函数采用有序的参数列表,其中一些可能是 nil,它返回第一个既非 nil 又不是空字符串的参数?

最佳答案

使用table.pack,它会保留所有nil条目并返回n字段中的条目数:

function first_non_empty_pack(...)
local t = table.pack(...)
for i = 1, t.n do
local item = t[i]
if item ~= nil and item ~= '' then
return item
end
end
return ''
end

关于lua - 如何创建一个函数来返回传递给它的第一个非零、非空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43410548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com