2016-09-02 1 views
0

Est-il possible de surcharger certaines méthodes de la classe de chaînes standard afin qu'elles puissent être appelées avec l'opérateur point? Par exemple:Invocation de méthodes chaîne de caractères lua avec l'opérateur point

s = "hello world" 
print(s.len()) 
+0

Vous pouvez définir 'call' pouvant être mis en correspondance, mais vous devez stocker la chaîne dans un objet conteneur. Mais pas avec la chaîne elle-même, si j'ai raison. utiliser '# 'est probablement plus facile. – Jakuje

+0

Je ne vois aucun lien entre le titre de la question et le contenu de la question. –

+0

Votre question n'est pas claire - le titre et le corps sont incohérents après votre modification. Les méthodes auto-référentielles sont appelées avec la notation deux-points ('s: len()') - sauf si vous voulez écrire 's.len (s)'. Avez-vous lu [Programmation dans Lua: OOP] (http://www.lua.org/pil/16.html)? – Oka

Répondre

1

Pour les types qui ne sont pas des tableaux ou userdata complète, chaque type a une métatable. C'est-à-dire, plutôt que chaque chaîne individuelle ayant sa propre métatable, toutes les chaînes partagent la même métabalite.

La bibliothèque de chaînes standard Lua affecte par défaut cette table de correspondance à la table string. Donc, si vous le souhaitez, vous pouvez ajouter des entrées à string.

Accordé, len n'a aucun sens, car nous avons # pour le calculer. Et vous devrez utiliser la syntaxe d'appel : si vous voulez passer la chaîne en tant que premier paramètre.