Estoy trabajando en un puerto de Python a Rust y encontré un código que no se puede expresar de forma tan natural en Rust como en Python.
Un caso de esto es el uso de parámetros predeterminados:
class Foo:
def __init__(self, a="Hello"):
self._a = a
En Rust, puede implementar esto usando un generador:
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 la clase en Python, es simplemente:
foo = Foo("Hello, World!")
Sin embargo, en Rust, necesitaría escribir algo como:
let foo = FooBuilder::new().change_a("Hello, World!").build();
Esto lleva a la pregunta: ¿es mejor mantener una API para un puerto, o es mejor usar expresiones idiomáticas del lenguaje portador? ¿Depende de qué tan conocida sea la API para empezar?