Ich arbeite an einem Port von Python nach Rust und bin auf einen Code gestoßen, der in Rust nicht so natürlich ausgedrückt werden kann wie in Python.
In einem Fall werden Standardparameter verwendet:
class Foo:
def __init__(self, a="Hello"):
self._a = a
In Rust können Sie dies mit einem Builder implementieren:
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,
}
}
}
Um die Klasse in Python zu verwenden, ist es einfach:
foo = Foo("Hello, World!")
In Rust müssten Sie jedoch Folgendes schreiben:
let foo = FooBuilder::new().change_a("Hello, World!").build();
Dies führt zu der Frage: Ist es besser, eine API für einen Port zu verwalten, oder sind Redewendungen der Portierungssprache besser? Kommt es darauf an, wie bekannt die API ist?