12 · Orientação a Objetos
Exponha uma capacidade no retorno
Use -> impl Store para expor o trait declarado e manter a implementação concreta privada. O compilador confere uma representação concreta de retorno para a função. O chamador pode usar os métodos prometidos pelo trait; campos e métodos adicionais ficam indisponíveis. Chame um método opaco diretamente; use || store.read(key) quando precisar de um callback. Extrair store.read sem o receptor é rejeitado.
Nesta página
Use -> impl Store para expor o trait declarado e manter a implementação concreta privada. O compilador confere uma representação concreta de retorno para a função. O chamador pode usar os métodos prometidos pelo trait; campos e métodos adicionais ficam indisponíveis. Chame um método opaco diretamente; use || store.read(key) quando precisar de um callback. Extrair store.read sem o receptor é rejeitado.
Exemplo completo
Exponha uma capacidade no retorno.
// A caller needs a settings store, without depending on its storage fields.
trait Store {
fn read(self, key: str) -> str?
}
struct MemoryStore {
theme: str,
revision: int,
}
impl Store for MemoryStore {
fn read(self, key: str) -> str? {
if key == "theme" { self.theme } else { nil }
}
}
impl MemoryStore {
fn generation(self) -> int = self.revision
}
fn settings() -> impl Store = MemoryStore { theme: "dark", revision: 2 }
let store = settings()
print("Theme: {store.read("theme") ?? "light"}")
print("Font: {store.read("font") ?? "system"}")
// The returned value exposes read; theme, revision and generation stay private.
Referência
zolo run examples/features/40-syntax-fourth/14-opaque-returns.zolo --no-cache
Veja também