Определение метода method
Для любых типов языка можно определять методы. Метод - это функция привязанная к объекту некоторого типа и обычно она осуществляет какие-либо действия с этим объектом. Определение метода состоит из ключевого слова method, имени возвращаемого типа ( если он есть), типа объекта и через точку имени метода. Далее идут параметры и тело метода как у функции. Описание параметров метода аналогично описанию параметров функции. Вызов метода аналогичен получению значения поля с указанием параметров в круглых скобках: объект.имяметода( параметры ).
Внутри метода автоматически создаётся параметр this. Этот параметр содержит объект для которого вызывается данный метод. Тип параметра this совпадает с типом объекта.
method uint str.islast( uint ch )
{
return this[ *this - 1 ] == ch
}
func main<main>
{
str mystr
...
if mystr.islast('\')
{
...
}
}
У метода можно указывать атрибуты result и alias как у функций. Методы отвечают за инициализацию объектов, их уничтожение, взятие индексов и конвертацию типов, а также для других целей. Более подробно об этом можно прочитать на странице Системные методы для типов.
Конвертация типов
С помощью методов можно описывать конвертацию типов. Для этого в качестве исходного типа указывается тип объекта, а конечный тип, в который следует сконвертировать объект, представлен именем метода. Если конечный тип является структурой, то необходимо использовать атрибут result.
// uint -> str
method str uint.str < result >
{
result.out4( "%u", this )
}
// str -> uint
method uint str.uint
{
uint end
return strtoul( this.ptr(), &end, 0 )
}
func main<main>
{
str mystr
uint a = uint( "100" )
mystr = str( a )
}