ฉันกำลังทำงานบนพอร์ตจาก Python ถึง Rust และพบกับโค้ดบางอย่างที่ไม่สามารถแสดงออกได้อย่างเป็นธรรมชาติใน Rust ตามที่ทำได้ใน Python
กรณีนี้มีการใช้พารามิเตอร์เริ่มต้น:
class Foo:
def __init__(self, a="Hello"):
self._a = a
ในสนิมคุณอาจใช้สิ่งนี้โดยใช้เครื่องมือสร้าง:
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 นั้นรู้จักกันดีในการเริ่มต้นอย่างไร