4.5 impl и методы
Объявление в impl | Получатель |
|---|---|
fn m() | &self |
var fn m() | &var self |
move fn m() | self по значению (перемещение) |
static fn m() | нет, вызов T.m() |
init m() | конструктор (§4.3) |
op +(…) | оператор (§5.3) |
- Внутри метода доступны
selfиSelf. Поля и методы доступны безself., если имя не затенено локальной переменной. impl T { … }ДОЛЖЕН находиться в пакете, объявившемT.impl I for T { … }— явная реализация интерфейса. Допускается, еслиIилиTобъявлены в текущем пакете.
Ассоциированные константы. const ИМЯ: T = e внутри impl T или interface объявляет константу типа, доступную как T.ИМЯ:
impl Money {
pub const ZERO: Money = Money{ minor: 0 }
pub const MAX_TRANSFER: Money = Money.rub(1_000_000)
}
interface Codec<T> { const NAME: str } // реализация обязана задать значение
impl Codec<Point> for GeoHashCodec { const NAME: str = "geohash" }eДОЛЖНО быть comptime-выражением; вызовы допустимы только кcomptime-функциям и конструкторам без эффектов.- Константа интерфейса без значения обязательна для реализации; со значением — значение по умолчанию.
- Ассоциированные константы допустимы в аргументах атрибутов (
@timeout(Limits.CHECKOUT)).
Связанные диагностики
impl-foreign-type, unknown-method
См. также
Исходник: docs/spec/oxl-standard.md