Я працюю над портом від Python до Rust і натрапив на якийсь код, який не може бути виражений так природно в Rust, як вони можуть в Python.
Один випадок цього - використання параметрів за замовчуванням:
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!")
Однак у Русті вам потрібно буде написати щось на кшталт:
let foo = FooBuilder::new().change_a("Hello, World!").build();
Це призводить до питання: чи краще підтримувати API для порту, чи краще використовувати ідіоми мови перенесення? Чи залежить це від того, наскільки добре відомо API для початку?