Lua:
字符串插值

How to: (如何操作:)

Lua doesn’t have built-in string interpolation, but we can get the job done nicely with some creativity. Here’s how:

-- Using string.format
local name = "Xiao Ming"
local age = 25
local greeting = string.format("Hello, %s! You are %d years old.", name, age)
print(greeting)  -- Output: Hello, Xiao Ming! You are 25 years old.

You can also concatenate strings directly:

-- Direct concatenation
local greeting = "Hello, " .. name .. "! You are " .. age .. " years old."
print(greeting)  -- Same output as above

Deep Dive (深入了解)

Historically, Lua never aimed for string interpolation within the language itself, and that’s partly why string.format is the go-to option—it supports a variety of formats, following the C printf style.

However, there are some makeshift alternatives:

  1. Using the gsub function:
local template = "Hello, ${name}! You are ${age} years old."
local interpolated = template:gsub('%${(%w+)}', {name="Xiao Ming", age=25})
print(interpolated)  -- Output mirrors the above
  1. Custom interpolation function:
function interpolate(s, tab)
  return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end))
end

local message = interpolate("Hello, ${name}! You are ${age} years old.", {name="Xiao Ming", age=25})
print(message)  -- Identical to previous results

Each method has its pros and cons, including readability and performance implications. Choose based on your need for speed or clarity.

See Also (另请参阅)

Here are some resources that might help you deepen your understanding and efficiency with strings in Lua:

Using these sources, you’ll solidify the concepts and get inventive with your solutions. Happy coding!