Lua中的string.gsub能否在string.gmatch内使用?

我创建了一个简单的示例脚本来输出食物清单。如果食物是水果,则还会显示水果的颜色。我遇到的问题是处理“草莓”的不规则复数形式。

目前程序输出如下:

马铃薯
苹果=绿色
草莓
胡萝卜
蟹苹果

我想要的是:

马铃薯
苹果=绿色
草莓=红色
胡萝卜
蟹苹果

我想不出为什么它不能像我想的那样工作!

点赞
用户1422127
用户1422127

stawberry 应该是 strawberry。这个循环将 strawberries 改为 strawberry 然后试图将其与 ^stawberry 进行匹配,但是拼写错误导致它们不能匹配。

2015-01-15 04:22:09
用户234175
用户234175

首先,这里拼错了草莓:

fruits = {apple = "green", orange = "orange", stawberry = "red"}

其次,你也可以将lua表格作为集合使用,这意味着嵌套循环寻找重复是不必要的。它可以简化为如下代码:

fruits = {apple = "green", orange = "orange", strawberry = "red"}
foods = {"potatoes", "apples", "strawberries", "carrots", "crab-apples"}

function singular(word)
    return word:gsub("(%a+)ies$", "%1y"):gsub("(%a+)s$", "%1")
end

for _, food in ipairs(foods) do
    local single_fruit = singular(food)
    if fruits[single_fruit] then
        print(food .. " = " .. fruits[single_fruit])
    else
        print(food)
    end
end
2015-01-15 04:22:18