Sto lavorando su una porta da Python a Rust e mi sono imbattuto in un codice che non può essere espresso naturalmente in Rust come in Python.
Un caso è l'utilizzo dei parametri predefiniti:
class Foo:
def __init__(self, a="Hello"):
self._a = a
In Rust, è possibile implementarlo utilizzando un builder:
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,
}
}
}
Per usare la classe in Python, è semplicemente:
foo = Foo("Hello, World!")
Tuttavia, in Rust, dovresti scrivere qualcosa del tipo:
let foo = FooBuilder::new().change_a("Hello, World!").build();
Questo porta alla domanda: è meglio mantenere un'API per una porta o è meglio usare modi di dire del linguaggio di porting? Dipende da quanto è noto l'API per cominciare?