2010-11-23 30 views
2

只是在Lua上閱讀了一個項目。我不喜歡用來連接字符串的'..'運算符(對我來說看起來很不自然)。我對Lua還不夠了解 - 但它看起來非常靈活。Lua中的字符串連接

是否有可能以某種方式'修改'此行爲(也許使用metatables?),以便我可以使用'+'而不是'..'來進行字符串連接?

+0

你爲什麼不使用join()方法? – Mudassir 2010-11-23 10:31:10

+0

@mudassir:我試圖讓腳本編寫者(最終是我自己)的生活更輕鬆。目標受衆不是編碼員。所以我希望他們能夠寫出簡單的語句,例如greeting ='hello'+'world' – skyeagle 2010-11-23 11:35:34

+2

字符串與「+」的連接是邪惡的,任何實現它的人都應該死於緩慢而痛苦的死亡。 – 2010-11-23 14:06:48

回答

3

是的,這是可能的。 This article from IBM具有使用一個特殊的「字符串」類中的一個例子:

-- 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) 

這種方法的優點是它不會對現有的字符串表的腳趾一步,這是稍微清楚現有的Lua用戶認爲您正在與__add運營商進行某種「不同」的活動。

6

試試這個代碼:

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