私はPythonからRustへの移植に取り組んでおり、RustでPythonほど自然に表現できないコードに遭遇しました。
これの1つのケースは、デフォルトのパラメーターを使用することです。
class Foo:
def __init__(self, a="Hello"):
self._a = a
Rustでは、ビルダーを使用してこれを実装できます。
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,
}
}
}
Pythonでクラスを使用するには、次のようにします。
foo = Foo("Hello, World!")
ただし、Rustでは、次のように記述する必要があります。
let foo = FooBuilder::new().change_a("Hello, World!").build();
これは、ポートのAPIを維持する方が良いのか、それとも移植言語のイディオムを使用する方が良いのかという疑問につながります。APIがどの程度有名であるかにかかっていますか?