kw embed
Зарезервированное слово
Список слов: §1.4
Синтаксис
Member = Field | "embed" Type | "invariant" Expr ;IMember = "embed" Type | "type" Ident [ "=" Type ] | Receiver "fn" Sig [ "=>" Expr | Block ] ;Грамматика: Прил. A
Определяется в
- 4.7 Встраивание и переопределение — Наследования реализации нет.
- 4.6 Интерфейсы — Интерфейсы структурные
- 1.4 Ключевые слова — Зарезервированные (нельзя использовать как имена)
Примеры
data Animal { name: str }
impl Animal {
open fn speak() -> str => "..."
fn hello() -> str => "I am {name}: {speak()}"
}
data Dog { embed Animal; breed: str }
impl Dog { override fn speak() -> str => "Woof, {super.speak()}" }
Dog{ name: "Rex", breed: "lab" }.hello() // "I am Rex: Woof, ..."— 4.7 Встраивание и переопределение
pub(api) interface Storage {
fn get(k: str) -> bytes? io
var fn put(k: str, v: bytes) io
fn has(k: str) -> bool io => get(k) != none // метод по умолчанию
}
interface ReadWrite { embed Reader; embed Writer }
interface Container<T> { type Item = T; fn items() -> iter<T> }
@explicit interface Persistent { fn key() -> str }
assert FileStorage: Storage // статическая проверкаСвязанные диагностики
ambiguous-embed, missing-override, override-without-open, explicit-interface, interface-not-satisfied