2016-06-13 27 views
1

何をフォーマットするのか分かっているならば、Luasのstring.formatはかなり簡単です。 しかし、私はフォーマットにワイルドカード文字列を取り、その空文字列に入れる引数の数を可変にする関数を書き留めました。string.format可変の引数の数

例:

str = " %5s %3s %6s %6s", 
val = {"ttyS1", "232", "9600", "230400"} 

手で非常に簡単であることをフォーマットする:

と同じである
string.format(str, val[1], val[2], val[3], val[4]) 

string.format(" %5s %3s %6s %6s", "ttyS1, "232", "9600","230400") 

しかし、私が持ってwan't場合はどのような第五引数か第六引数か?たとえば :

string.format(" %1s %2s %3s %4s %5s %6s %7s %", ...) 

どのように私は、可変個の引数を持つString.Formatのを実装することができますか?

パフォーマンス上の問題のため、値を1つずつ追加しないようにしたいと考えています。 アプリケーションは、内蔵MCUで動作します。

+3

'str:format(unpack(val))' –

+1

これは簡単です...答えに入れると正解とマークできます。 – Sempie

答えて

0

フォーマットがすべての引数で同じ場合は、string.repで任意のフォーマットの任意のリピート数を生成します。または、テーブルにすべての書式を入力してtable.concatを使用します。順序を変更したくない場合は、formatの引数のインデックスを指定する必要はないことに注意してください。

文字列をスペースで区切って連結する必要がある場合は、より適切なツール:table.concat(table_of_strings, ' ')を使用してください。

0

あなたは可変引数を使用してテーブルを作成することができます:あなたは引数リストがnilが含まれている場合がありますが予想される場合

function foo(fmt, ...) 
    local t = {...} 
    return t[6] -- might be nil 
end 

Psが、テーブルの上に#を使用しないでください。代わりにselect("#", ...)を使用してください。