社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Jquery

如何在RIST中重新实现jQuery样式链接?[副本]

TheEnvironmentalist • 4 年前 • 294 次点击  

根据下面的例子,可以用链式方法调用一个生成模式,它通过值或引用(以生命说明符)传递。

生锈的建筑图案可能看起来像这样:

 ui::Button::new()
    .label("Test")
    .align(Align::Center)
    .build();

当写习惯性的铁锈时,有没有强烈的偏好?

有什么好的例子可以用铁锈写出来吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46347
 
294 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Nathan Ringo
Reply   •   1 楼
Nathan Ringo    7 年前

我已经看到构建器模式主要是通过在修改时获得构建器的所有权来实现的,并且通过引用 build() 是的。例如,

#[derive(Debug, Eq, PartialEq)]
struct Foo {
    value: usize,
}

struct FooBuilder {
    foos: usize,
    bars: usize,
}

impl FooBuilder {
    fn new() -> FooBuilder {
        FooBuilder {
            foos: 0,
            bars: 0,
        }
    }
    fn set_foos(mut self, foos: usize) -> FooBuilder {
        self.foos = foos;
        self
    }
    fn set_bars(mut self, bars: usize) -> FooBuilder {
        self.bars = bars;
        self
    }
    fn build(&self) -> Foo {
        Foo {
            value: self.foos + self.bars,
        }
    }
}

fn main() {
    let foo = FooBuilder::new()
        .set_foos(2)
        .set_bars(3)
        .build();
    assert_eq!(foo, Foo { value: 5 });
}

Try on Rust Playground

这使得链接简单,同时允许重用生成器。

Matthieu M.
Reply   •   2 楼
Matthieu M.    7 年前

实际上 权衡:

  • 指定的setter是否接受 self 按价值或参考?
  • 应该是决赛 build 方法接受 自己 按价值或参考?

我的建议是:

  • setters的可变引用
  • 价值 建造 方法

这与 Builder Pattern 出现在铁锈书中,该书引用了 建造 是的。


为什么要为setter传递可变引用?

当编译器 可以 优化取消调用 fn label(self, &str) -> ButtonBuilder ,不保证。

另一方面,可变引用方式已经是最优的,因此您不需要依赖优化器。


为什么通过价值为最终 建造 是吗?

建筑商只有 Copy 字段之间没有区别 建造 自己 &self 是的。

但是,只要构建器包含- 复制 场,传球 &自己 建造 需要深入克隆这些字段。

另一方面,传球 自己 按值允许 建造 移动字段,以避免不必要的复制。

如果希望重用构建器,那么构建器应该实现 Clone 是的。