2010-11-23 21 views
2

プロジェクトのLuaでの読み込みのみ。私は文字列を連結するために使用される '..'演算子が好きではありません(ちょっと不自然に見えます)。私はまだLuaについては十分に分かっていませんが、非常に柔軟なようです。Luaでの文字列連結

私は '..'の代わりに '+'を使うことができるように、何らかの形でこの動作(おそらくメタテーブルを使用しています)を '変更'できますか?

+0

)? – Mudassir

+0

@mudassir:私は脚本家の人生を楽にしようとしています(そして最終的には自分自身)。ターゲットオーディエンスはコーダーではありません。だから私は彼らにgreeting = 'hello' + 'world'のような単純な文章を書くことができるようにしたい。 – skyeagle

+2

"+"との文字列連結は悪であり、それを実装する人は誰でも遅い、 –

答えて

3

はい、可能です。このアプローチは、それが既存の文字列テーブルのつま先を踏まないという利点を持っており、それがわずかにより明らかだ

-- Overload the add operation 
-- to do string concatenation 
-- 
mt = {} 

function String(string) 
    return setmetatable({value = string or ''}, mt) 
end 

-- The first operand is a String table 
-- The second operand is a string 
-- .. is the Lua concatenate operator 
-- 
function mt.__add(a, b) 
    return String(a.value..b) 
end 

s = String('Hello') 
print((s + ' There ' + ' World!').value) 

This article from IBMは、特別な「文字列」クラスを使用しています。一例を持っています既存のLuaユーザは、__addオペレータで何か「違う」ことをやっている。

+0

迅速な対応をありがとう。私の対象読者は完全なテクノフォックスです。このlikeleyは(スクリプトの作家)、単純な '..'を使用して連結するよりも、それらを混乱させる。ああよく... – skyeagle

+0

興味深い記事。 –

6

は、このコードを試してください:あなたは(結合を使用していないのはなぜ

getmetatable("").__add = function(x,y) return x..y end 
print("hello"+" "+"world") 
+0

私はちょうど同じ答えを書いていました。あなたはもっと素早くです:) –

+0

ええと、私のために、print(getmetatable( "")) 'は' nil'です – ulrichb

+0

ああ、文字列ライブラリ**! http://www.lua.org/manual/5.1/manual.html#5.4 – ulrichb