Estou trabalhando em uma porta do Python para o Rust e encontrei um código que não pode ser expresso tão naturalmente no Rust quanto no Python.
Um caso disso é usar parâmetros padrão:
class Foo:
def __init__(self, a="Hello"):
self._a = a
No Rust, você pode implementar isso usando um construtor:
struct FooBuilder {
a: &'static str,
}
struct Foo {
_a: &'static str
}
impl FooBuilder {
fn new() -> FooBuilder {
FooBuilder {
a: "Hello",
}
}
fn change_a(self, new_a: &'static str) -> FooBuilder {
FooBuilder {
a: new_a,
..self
}
}
fn build(self) -> Foo {
Foo {
_a: self.a,
}
}
}
Para usar a classe em Python, é simplesmente:
foo = Foo("Hello, World!")
No entanto, no Rust, você precisaria escrever algo como:
let foo = FooBuilder::new().change_a("Hello, World!").build();
Isso leva à pergunta: é melhor manter uma API para uma porta ou é melhor usar expressões idiomáticas da linguagem de portabilidade? Depende de quão bem conhecida é a API?