只是在Lua上閱讀了一個項目。我不喜歡用來連接字符串的'..'運算符(對我來說看起來很不自然)。我對Lua還不夠了解 - 但它看起來非常靈活。Lua中的字符串連接
是否有可能以某種方式'修改'此行爲(也許使用metatables?),以便我可以使用'+'而不是'..'來進行字符串連接?
只是在Lua上閱讀了一個項目。我不喜歡用來連接字符串的'..'運算符(對我來說看起來很不自然)。我對Lua還不夠了解 - 但它看起來非常靈活。Lua中的字符串連接
是否有可能以某種方式'修改'此行爲(也許使用metatables?),以便我可以使用'+'而不是'..'來進行字符串連接?
是的,這是可能的。 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
運營商進行某種「不同」的活動。
試試這個代碼:
getmetatable("").__add = function(x,y) return x..y end
print("hello"+" "+"world")
你爲什麼不使用join()方法? – Mudassir 2010-11-23 10:31:10
@mudassir:我試圖讓腳本編寫者(最終是我自己)的生活更輕鬆。目標受衆不是編碼員。所以我希望他們能夠寫出簡單的語句,例如greeting ='hello'+'world' – skyeagle 2010-11-23 11:35:34
字符串與「+」的連接是邪惡的,任何實現它的人都應該死於緩慢而痛苦的死亡。 – 2010-11-23 14:06:48