Saya sedang mengerjakan port dari Python ke Rust dan berlari ke beberapa kode yang tidak bisa diekspresikan secara alami di Rust seperti yang mereka bisa di Python.
Salah satu kasusnya adalah menggunakan parameter default:
class Foo:
def __init__(self, a="Hello"):
self._a = a
Di Rust, Anda dapat menerapkan ini menggunakan pembangun:
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,
}
}
}
Untuk menggunakan kelas dengan Python, cukup:
foo = Foo("Hello, World!")
Namun, di Rust, Anda perlu menulis sesuatu seperti:
let foo = FooBuilder::new().change_a("Hello, World!").build();
Ini mengarah pada pertanyaan: apakah lebih baik memelihara API untuk porta, atau lebih baik menggunakan idiom bahasa porting? Apakah ini tergantung pada seberapa terkenal API untuk memulai?