2011-07-07 9 views
28

मेरे पास एक बुलियन वैरिएबल है जिसका मूल्य मैं स्वरूपित स्ट्रिंग में प्रदर्शित करना चाहता हूं। मैं string.format का उपयोग कर की कोशिश की, लेकिन language reference में सूचीबद्ध प्रारूप विकल्प के किसी भी चुनाव के लिए निम्नलिखित की तरह कुछ मिलता है:एक बूलियन चर के साथ एक लुआ स्ट्रिंग को कैसे प्रारूपित करें?

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio 
> print(string.format("%c\n", true)) 
stdin:1: bad argument #2 to 'format' (number expected, got boolean) 
stack traceback: 
    [C]: in function 'format' 
    stdin:1: in main chunk 
    [C]: ? 

मैं बूलियन एक tostring जोड़कर प्रदर्शित करने के लिए प्राप्त कर सकते हैं,

> print(string.format("%s\n", tostring(true))) 
true 

लेकिन यह है कि इस लुआ शुरुआत के लिए अप्रत्यक्ष लगता है। क्या कोई प्रारूपण विकल्प है जिसे मैंने अनदेखा किया है? या मुझे उपर्युक्त दृष्टिकोण का उपयोग करना चाहिए? कुछ और?

+0

string.format का उपयोग क्यों करें? क्यों न केवल प्रिंट करें (tostring (true)) –

+0

आप nil, function, thread, userdata को भी प्रारूपित नहीं कर सकते ... – sylvanaar

+0

@ जेन टी क्योंकि यह एक लंबी स्ट्रिंग का हिस्सा है, उदाहरण कम से कम नीचे दिया गया है। –

उत्तर

31

string.format के कोड को देखते हुए, मुझे कुछ भी दिखाई नहीं देता जो बूलियन मूल्यों का समर्थन करता है। मुझे लगता है कि tostring उस मामले में सबसे उचित विकल्प है।

7

आप एक अतिरिक्त %t विनिर्देशक कि एक तर्क पर tostring चलाता है समर्थन करने के लिए String.Format को फिर से परिभाषित कर सकते हैं:

print(string.format("bool: %t",true)) -- prints "bool: true" 
19
:

do 
    local strformat = string.format 
    function string.format(format, ...) 
    local args = {...} 
    local match_no = 1 
    for pos, type in string.gmatch(format, "()%%.-(%a)") do 
     if type == 't' then 
     args[match_no] = tostring(args[match_no]) 
     end 
     match_no = match_no + 1 
    end 
    return strformat(string.gsub(format, '%%t', '%%s'), 
     unpack(args,1,select('#',...))) 
    end 
end 

इस के साथ, आप किसी भी गैर-स्ट्रिंग प्रकार के लिए उपयोग कर सकते हैं %t

लुआ 5.1 में, string.format("%s", val) आपको valtostring() के साथ मैन्युअल रूप से लपेटने की आवश्यकता है यदि val स्ट्रिंग या संख्या के अलावा कुछ भी है।

लुआ 5.2 में, हालांकि, string.format ही नई सी समारोह luaL_tolstring, जो val पर tostring() बुला के बराबर करता है कॉल करेंगे।