2011-07-07 29 views
28

Değeri, biçimlendirilmiş bir dizede görüntülemek istediğim bir boole değişkeni var. ,Bir lua dizgisini bir boole değişkeni ile nasıl biçimlendiririm?

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]: ? 

Ben boolean bir tostring ekleyerek gösterilecek alabilirsiniz

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

ama bu: Ben string.format kullanarak, fakat language reference listelenen biçim seçeneği herhangi bir seçim için aşağıdaki gibi bir şey elde çalıştı Bu yeni başlayanlar için oldukça dolaylı görünüyor. Gözden geçirdiğim bir biçimlendirme seçeneği var mı? Yoksa yukarıdaki yaklaşımı kullanmalı mıyım? Başka bir şey?

+0

string.format neden kullanılıyor? Neden sadece baskı (tostring (true)) –

+0

da nil, işlev, iş parçacığı, kullanıcı biçimi biçimlendiremezsiniz ... – sylvanaar

+0

@Jane T Daha uzun bir dizenin parçası olduğu için, örnek minimum değere ayrıştırılmıştır. –

cevap

31

string.format koduna bakarak, boole değerlerini destekleyen hiçbir şey göremiyorum. Sanırım, bu durumda en uygun seçenek tostring'dur.

7

Bir argüman üzerinde tostring çalışan ek %t belirtici desteklemek için String.format yeniden tanımlayabilirsiniz:

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

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 

, herhangi olmayan dize türü için %t kullanabilirsiniz

Lua 5.1, string.format("%s", val)'da val, val bir dize veya sayıdan başka bir şeyse val1'i tostring() ile el ile sarmanızı gerektirir.

Lua 5.2 Ancak string.format kendisi val üzerinde tostring() arayarak eşdeğer yapar yeni C işlevi luaL_tolstring, çağıracaktır.

İlgili konular