Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >驼鹿“建造者”与“默认”

驼鹿“建造者”与“默认”
EN

Stack Overflow用户
提问于 2012-03-01 16:26:55
回答 3查看 6.3K关注 0票数 16

我理解使用builder可以使子类轻松地覆盖属性默认值,角色可以轻松地覆盖它们。这也可以使用default实现,如下所示:

代码语言:javascript
运行
AI代码解释
复制
has 'foo' =>
    is       => 'rw',
    isa      => 'Str',
    default  => sub { $_[0]->_build_foo };

我想知道使用builder是否还有更多的优势,我不知道?我自己想出了一些:

  • builder是声明性的,所以您可以内省_build_foo
  • builder构建的foo,消除了一个子程序包装器,使它稍微有点faster
  • builder允许使用有用的lazy_build.

更新以澄清,这不是关于defaultbuilder的一般问题,而是default => sub { $_[0]->_build_foo }builder => '_build_foo'之间的关系。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-01 18:54:11

我想你已经回答了你自己的问题。使用builder允许后期绑定,这与要被子类化的角色和类很好地配合。如果构建器很长的话,它也是很有价值的--我在属性定义中的default长度从来不超过一行。没有真正的功能差异;default可以很容易地模仿builder,但是结果不太好。

票数 13
EN

Stack Overflow用户

发布于 2012-03-01 18:18:47

两者之间没有区别

代码语言:javascript
运行
AI代码解释
复制
default => sub { $_[0]->_build_foo }

代码语言:javascript
运行
AI代码解释
复制
builder => '_build_foo'

defaultbuilder的主要区别在于,一个调用anon,另一个调用命名方法。

代码语言:javascript
运行
AI代码解释
复制
has created_time_stamp => (
   default => sub { time() },
);

对比

代码语言:javascript
运行
AI代码解释
复制
has created_time_stamp => (
   builder => '_build_created_time_stamp',
);

sub _build_created_time_stamp { time() }

使用default可以减少代码的滚动,因为一切都是您需要它的地方。我就是为了这个原因才用它的。也就是说,使用较少的打字是一个额外的好处。

它还迫使您更明确地说明如何覆盖构建器。其他答案认为这是一个骗局,但我认为,在一个尚未被构造的对象上调用虚拟方法是一个糟糕的实践!这就是BUILD的作用。

票数 4
EN

Stack Overflow用户

发布于 2012-03-01 20:13:46

适当地使用“生成器”和“默认”可以使您的代码更易于阅读和组织。

“‘builder”还可以适应一种熟悉的编程模式,在这种模式中,私有方法以下划线开头。

代码语言:javascript
运行
AI代码解释
复制
has json => ( is => 'ro', default => sub { JSON->new } )
has schema => ( is => 'ro', builder => '_schema' }

sub _schema {
  my $self = shift;
  $self->log_debug('constructing schema') if($self->debug);
  My::App::Schema->connect($self->dsn,$self->username,$self->password)  
}

此外,使用构建器可以将昂贵的函数转换为回忆录访问器,而无需触及原始方法:

代码语言:javascript
运行
AI代码解释
复制
sub get_things {
  my $self = shift;
  return +{ map { $_ => $self->price_for($_) }
    $self->wodgets->calulate_expensive_things };

用回忆录重构:

代码语言:javascript
运行
AI代码解释
复制
has things => ( is => 'ro', lazy => 1, builder => 'get_things' );

这些都是我使用构建器来澄清代码的大多数方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9526347

复制
相关文章
PCA不适用于时间序列分析的案例研究
在大部份情况下我们都可以使用 PCA 进行线性降维。从图像处理到非结构化数据,无时无刻不在。我们甚至可以将它用于时间序列分析,虽然有更好的技术。在这篇文章中,我想向您介绍动态模式分解 (DMD),这是一种源自我的研究领域:流体动力学的用于高维时间序列的线性降维技术。DMD 结合了两个世界中的优点:PCA 和傅立叶变换。在数学上,它与动力系统理论中的一个基本算子有关,称为 Koopman 算子。但在深入研究 DMD 的数学之前,让我们用一个相当简单的例子来说明为什么 PCA 不是高维时间序列分析的最佳选择。
deephub
2021/07/23
1.6K0
PCA不适用于时间序列分析的案例研究
观察者模式observer不适用于_观察者模式代码
在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化
全栈程序员站长
2022/09/22
7080
CVPR 2022 | DiffusionCLIP: 用于稳健图像处理的文本引导扩散模型
近期,结合对比语言-图像预训练(CLIP)的 GAN 反演方法在零样本图像操作方面引起了广泛关注,它可以根据文本提示进行图像操作。然而,由于 GAN 反演性能有限,它在各种类型的真实世界图像上的应用仍然很棘手。具体而言,成功的图像操作应该将图像属性转换为目标属性,同时不会对输入内容产生意外变化。然而,目前最先进的基于编码器的 GAN 反演方法往往不能成功重建具有新姿势、视角和细节的图像。当处理高变异数据集(如 LSUN-Church 和 ImageNet )中的图像时,这个问题变得更加严重。 最近,扩散模型,如去噪扩散概率模型(DDPM)和基于分数的生成模型在图像生成任务上取得了巨大的成功。最新的研究表明,与变分自编码器(VAEs)、流动模型、自回归模型和生成对抗网络(GANs)相比,这些模型在图像合成性能方面具有更高的质量。此外,最近的去噪扩散隐式模型(DDIM)进一步加速了采样过程,并实现了几乎完美的反演。 基于此,本文提出了一种新的 DiffusionCLIP 方法,这是一种通过扩散模型进行 CLIP 引导的强大图像操作方法。其关键思想是使用基于文本提示的 CLIP 损失来微调反向扩散过程中的评分函数,以控制生成图像的属性。这种方法可以成功地在训练过和未见过的领域中进行图像操作,甚至可以将图像从一个未见过的领域转换为另一个未见过的领域,或者从草图中生成未见过的领域的图像。此外,通过简单地将多个经过微调模型预测的噪声组合在一起,可以通过仅进行一次采样过程同时改变多个属性。另外,DiffusionCLIP 通过操作来自广泛多样的 ImageNet 数据集的图像,在 GAN 反演方面取得了一步进展。此前由于其较差的重建效果,该数据集很少被探索。本文还提出了一种系统的方法来寻找导致高质量和快速图像操作的最佳采样条件。
用户1324186
2023/09/09
1.3K0
CVPR 2022 | DiffusionCLIP: 用于稳健图像处理的文本引导扩散模型
Brain综述:基于脑网络引导的神经调控用于治疗癫痫
癫痫被公认为是一种大脑网络紊乱疾病。越来越多的研究旨在识别动态癫痫网络中的关键节点,以靶向治疗,阻止癫痫发作和传播。与此同时,颅内神经调节,包括脑深部刺激和反应性神经刺激,已被证实并作为减少局灶性癫痫成人癫痫发作的治疗方法而不断扩大;越来越多的证据表明它们对儿童和广泛性癫痫发作障碍有效。这些先进领域的融合正在推动癫痫的网络引导神经调节时代的到来。在这篇综述中,我们提炼了目前关于癫痫神经刺激的网络机制的文献。我们讨论了致痫网络中关键传播点的调制,主要集中在当前临床实践中靶向的丘脑核。
悦影科技
2023/01/16
4910
js用于树型结构级联选择 支持三态级联选择
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>及联选择-用于权限选择比较合适</title> </head> <body> <ul id="tree">     <li><input type=checkbox>         <ul>             <li><input type=checkbox>                 <ul>
用户1183026
2018/01/19
2.6K0
Spark Tips 1: RDD的collect action 不适用于单个element size过大的情况
collect是Spark RDD一个非常易用的action,通过collect可以轻易获得一个RDD当中所有的elements。当这些elements是String类型的时候,可以轻易将整个RDD转化成一个List<String>,简直不要太好用。 不过等一等,这么好用的action有一个弱点,它不适合size比较的element。举个例子来说吧。请看下面这段代码: ... ... JavaPairInputDStream<String, String> messages = KafkaUtils.cr
叶锦鲤
2018/03/15
1.3K0
SAP MM里的ERS功能不适用于供应商寄售采购模式
今天收到了一个做零售行业项目的SAP同行的问题,客户问她是否可以在供应商寄售采购流程里启用SAP的ERS功能。我甚为吃惊,感觉这个SAP客户的问题还不简单,不浅薄。同时也觉得这个客户对SAP的学习很积极很主动,居然对很多SAP顾问没有用过的ERS功能有所了解。
SAP虾客
2022/01/25
1K0
SAP MM里的ERS功能不适用于供应商寄售采购模式
jQuery ajax - ajax() 方法jQuery ajax - ajax() 方法
http://www.w3school.com.cn/jquery/ajax_ajax.asp
一个会写诗的程序员
2018/08/17
14.8K0
windows安装器引导驱动器选择哪个?_git安装教程 windows
git cz是git的一个插件,git本身并不提供,但其提供了非常强的格式管理以及良好的操作模式,使其可以完全替代git commit。
全栈程序员站长
2022/10/03
1.5K0
windows安装器引导驱动器选择哪个?_git安装教程 windows
关联规则算法Apriori algorithm详解以及为什么它不适用于所有的推荐系统
Apriori是Agarwal和Srikant在1994年首次提出的一种关联规则挖掘算法,它可以在特定类型的数据中找到关系,并将其表示为规则。关联规则挖掘最常用于营销,特别是在购物车的上下文中。这个应用领域被正式称为“购物车分析”。
deephub
2022/11/11
1.5K0
关联规则算法Apriori algorithm详解以及为什么它不适用于所有的推荐系统
将SHAP用于特征选择和超参数调优
特征选择和超参数调整是每个机器学习任务中的两个重要步骤。大多数情况下,它们有助于提高性能,但缺点是时间成本高。参数组合越多,或者选择过程越准确,持续时间越长。这是我们实际上无法克服的物理限制。我们能做的是充分利用我们的管道。我们面临着不同的可能性,最方便的两个是:
deephub
2021/07/01
2.6K0
速读原著-GRUB_多系统引导(GRUB软件包版本选择和安装)
grub-install 命令有何用呢?其实就是把我们前面已经安装的软件包中的一些文件复制到 /boot/grub中;对于新安装GRUB软件包后,也是一个必经的过程;我们前面所说的GRUB软件包的安装;而现在我们说的是GRUB配置的过程中的安装;虽然在洋文中都是install ,但表达的意思是不一样的;
cwl_java
2020/02/14
1.6K0
jQuery ajax - ajax()方法
什么是 AJAX? AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
江一铭
2022/06/17
9.5K0
如何选择应用于日常及业务层面的代理?
共享代理 由多名用户同时使用,意味着其他用户也能访问这些代理。这会导致代理速度变慢,更重要的一点是,如果其他用户正与您访问相同的网站,那么被拦截的概率将变高。
用户7850017
2022/11/25
2450
如何选择应用于日常及业务层面的代理?
选择性细化网络用于高性能人脸检测
人脸检测是自动人脸识别系统中的一个关键环节。早期的人脸识别研究主要针对具有较强约束条件的人脸图象(如无背景的图象),往往假设人脸位置一直或者容易获得,因此人脸检测问题并未受到重视。
计算机视觉研究院
2019/09/18
3820
选择性细化网络用于高性能人脸检测
速读原著-GRUB_多系统引导(GRUB软件包版本选择和安装)
如前面所说,目前在在Unix类的操作系统中,大多是都有GRUB;GRUB几乎能引导所有X86架构的操作系统;功能之强,使用简单是GRUB最大的卖点;由于Windows 操作系统的先入为主的优势,使得大家对Windows的NTLOADER了解的比较多,而对开源社区的GRUB显得有点寞生,由此而带来使用上的“心理恐惧”;究其初学者对GRUB“恐惧”的主要原因还是对GRUB没有太多的了解和深入;无论是WINGRUB还是Linux版本的GRUB,最方便的还是对 GRUB命令行的操作;一谈到命令行(Command)的操作,可能初学者对此恐惧;其实没有什么难的,象北南这样低级的写手,还能操作得起来,您也应该能行;
cwl_java
2020/02/14
1.6K0
旁观者.个性引导页个性引导页
这款个人主页简约而不失优雅,背景图片为随机api,共有38张随机图片,每次刷新都会看到不一样的美图。
小化先森
2023/03/05
1.1K0
CIKM'22 | EC4SRec:可解释引导的对比学习用于序列推荐
对比学习被广泛的应用于序列推荐,以解决交互数据稀疏的问题,但现有的基于对比学习的方法无法确保通过对给定锚用户序列的一些随机增强(或序列采样)获得的正(或负)序列在语义上保持相似(或不同)。当正负序列分别为假阳性和假阴性时,可能会导致推荐性能下降。本文通过提出解释引导增强(EGA)和解释引导对比学习序列推荐(EC4SRec)模型框架来解决上述问题。EGA 的关键思想是利用解释方法来确定商品在用户序列中的重要性,并相应地推导出正负序列。然后,EC4SRec 在 EGA 操作生成的正负序列上结合自监督和监督对比学习,以改进序列表征学习以获得更准确的推荐结果。
秋枫学习笔记
2023/01/30
8670
Ajax:初次认识ajax,ajax使用方法
我们来个简单的测试,使用最原始的HttpServletResponse处理 , .最简单 , 最通用
冷环渊
2021/10/19
5.9K0
什么场景不适合箭头函数
这些年来,ES6 将 JS 的可用性提升到一个新的水平时: 箭头函数、类等等,这些都很棒。
前端小智@大迁世界
2020/05/26
8370

相似问题

引导验证不适用于引导选择

13

引导确认不适用于ajax调用

121

DeselectAll不适用于引导-选择

45

引导模式隐藏不适用于jquery ajax

40

ajax不适用于多个选择框

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档