Lua中的返回参数

format = function(&返回值, 长度, 格式, ...)
   返回值 = string.format(格式, ...);
   返回值 = string.sub(返回值, 0, 长度);
   return 1;
end

local Test;

format(Test, 12, "Hello world %s! This is a test.", "Hello World");

print(Test);

我希望它打印出"Hello world!",而不是由函数返回,而是由参数返回。

点赞
用户2328287
用户2328287

你可以像下面这样做:

local function Pointer()
  return setmetatable({},{
    __tostring = function(self) return self.value end
  })
end

format = function(Return, Length, Format, ...)
  Return.value = string.sub(Format, 0, Length)
  return 1
end

local Test = Pointer()

format(Test, 12, "Hello world %s! This is a test.", "Hello World")

print(Test)
2014-09-09 09:48:21
用户869951
用户869951

在你的示例中,你没有访问 Return,只是设置了它;而且你也没有使用返回值 '1'。所以:为什么不这样做:

format = function(Length, Format, ...)
    local Return = string.format(Format, ...)
    Return = string.sub(Format, 0, Length)
    local status = 1 -- 我猜这是某种状态码
    return Return, status
end

local Test, stat = format(12, "Hello world %s! This is a test.", "Hello World")

代码审查笔记:

  • 基于你到处使用分号和&Return作为函数参数,看起来你仍然“以C思考”。别这么想。当你在Lua中编程时,要以Lua思考。在Lua中,你可以返回多个值,并且不需要分号,所以为什么用不必要的符号来阻碍代码呢。
  • 我建议保持所有格式化组件在一起,这样你可以很容易地进行扩展:
local Test, stat = format("Hello world %s! This is a test.",
                         ["Hello World", 12], ['Joe', 5])
2014-09-09 13:06:50