2016-09-02 6 views
0

Можно ли переопределить некоторые методы стандартного класса строк, чтобы их можно было вызвать с помощью оператора точки? Например:вызов метода lua string с помощью оператора точки

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

Вы можете установить метасимвол 'call', но вам нужно будет сохранить строку в некотором содержащем объект. Но не с самой строкой, если я прав. использование '#', вероятно, проще. – Jakuje

+0

Я не вижу никакой связи между заголовком вопроса и содержанием вопроса. –

+0

Ваш вопрос непонятен - название и тело непоследовательны после вашего редактирования. Самореферентные методы вызывают с помощью двоеточия ('s: len()') - если вы не хотите писать 's.len (s)'. Вы читали [Программирование в Lua: OOP] (http://www.lua.org/pil/16.html)? – Oka

ответ

1

Для типов, которые не являются таблицей или полным UserData, каждый типа имеет метатаблицу. То есть вместо каждой отдельной строки, имеющей свой собственный метатебель, все строки имеют один и тот же метатебель.

Стандартная библиотека строк Lua по умолчанию присваивает этот метатег таблице string. Поэтому, если вы хотите, вы можете добавить записи в string.

Предоставлено, len не имеет смысла, так как у нас есть #, чтобы вычислить это. И вам нужно будет использовать синтаксис вызова :, если вы хотите передать строку в качестве первого параметра.