2010-11-23 9 views
2

juste lire sur Lua pour un projet. Je n'aime pas l'opérateur '..' utilisé pour concaténer les chaînes (il me semble peu naturel). Je ne sais pas encore assez sur Lua - mais il semble que ce soit très flexible.Concaténation de chaînes dans Lua

Est-il possible de «modifier» en quelque sorte ce comportement (peut-être en utilisant des métabalises?) Afin que je puisse utiliser '+' au lieu de '..' pour la concaténation de chaînes?

+0

Pourquoi utilisez-vous pas rejoindre()? – Mudassir

+0

@mudassir: J'essaie de rendre la vie plus facile aux scénaristes (et finalement à moi-même). Le public cible n'est pas des codeurs. Donc je veux qu'ils soient capables d'écrire des déclarations simplistes comme salut = 'bonjour' + 'monde' – skyeagle

+2

La concaténation de chaînes avec "+" est mauvaise et quiconque la met en œuvre mérite de mourir une mort lente et douloureuse. –

Répondre

3

Oui, c'est possible. This article from IBM a un exemple qui utilise une classe spéciale « 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) 

Cette approche a l'avantage de ne marchent pas sur les pieds de la table de chaîne existante, et il est un peu plus clair utilisateurs existants Lua que vous faites quelque chose de "différent" avec l'opérateur __add.

+0

Merci pour la réponse rapide. Mon public cible sont des technophobes complets. Cette likeley pour les confondre (les scénaristes), encore plus que d'utiliser le simple '..' pour concaténer. Eh bien ... – skyeagle

+0

article intéressant. –

6

Essayez ce code:

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

J'écrivais juste la même réponse, vous êtes plus rapide :) –

+0

hmm, ... pour moi, 'print (getmetatable (" "))' est 'nil' – ulrichb

+0

Oh, .... il faut le ** bibliothèque de chaînes ** !!! voir http://www.lua.org/manual/5.1/manual.html#5.4 – ulrichb

Questions connexes