kw embed
Reserved keyword
The list of words: §1.4
Syntax
Member = Field | "embed" Type | "invariant" Expr ;IMember = "embed" Type | "type" Ident [ "=" Type ] | Receiver "fn" Sig [ "=>" Expr | Block ] ;Grammar: App. A
Defined in
- 4.7 Embedding and overriding — There is no implementation inheritance.
- 4.6 Interfaces — Interfaces are structural
- 1.4 Keywords — Reserved (cannot be used as names)
Examples
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 Embedding and overriding
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 // a default method
}
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 // static checkRelated diagnostics
ambiguous-embed, missing-override, override-without-open, explicit-interface, interface-not-satisfied