سؤال
في C ، لدي سلاسل تنسيق ، شيء مثل:
char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);
الآن ، هل يمكنني فعل شيء مشابه في لوا مع سلاسل التنسيق؟ أي أريد شيئًا مكافئًا وظيفيًا:
name .. ", " .. msg .. "?"
ولكن ليس قبيح جدا ، في لوا.
حسنًا ، حتى أتمكن من القيام string.format ("٪ s ، ٪ s؟" ، الاسم ، msg) ، ولكن هل يمكنني حتى أن أذهب إلى أبعد من ذلك ، شيء مثل نمط بيرل ، حيث يمكنني الذهاب:
"%name, %msg?"
شكرًا!
المحلول
بحسب ال مقالة مستخدمي LUA على interpolation سلسلة, ، لا يقدم لوا طريقة محلية مدمجة للقيام بذلك ؛ ومع ذلك ، هناك بعض الحلول التي تم نشرها في تلك الصفحة.
إليك تطبيق واحد بسيط (- Ricilake):
function interp(s, tab) return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end)) end print( interp("${name} is ${value}", {name = "foo", value = "bar"}) ) getmetatable("").__mod = interp print( "${name} is ${value}" % {name = "foo", value = "bar"} ) -- Outputs "foo is bar"
نصائح أخرى
هل يمكنني القيام بشيء مماثل [للطباعة] مع سلاسل تنسيق لوا؟
نعم. أفعل هذا في كل وقت:
local function printf(...) return io.stdout:write(string.format(...)) end
local function fprintf(f, ...) return f:write(string.format(...)) end
تعديل لتذوق.
لا تنتمي إلى StackOverflow