Конкатенация строк в Lua - PullRequest
2 голосов
/ 23 ноября 2010

просто читаю Lua для проекта.Мне не нравится оператор «..», используемый для объединения строк (мне кажется, это неестественно).Я пока не знаю достаточно о Lua, но он кажется очень гибким.

Можно ли как-то «изменить» это поведение (возможно, с помощью метатаблиц?), Чтобы я мог использовать «+» вместо «..» для конкатенации строк?

Ответы [ 2 ]

6 голосов
/ 23 ноября 2010

Попробуйте этот код:

getmetatable("").__add = function(x,y) return x..y end
print("hello"+" "+"world")
3 голосов
/ 23 ноября 2010

Да, это возможно. Эта статья от IBM содержит один пример, в котором используется специальный класс "String":

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...