|
|
1
6
“最佳”是主观的,但您必须决定哪一个在代码中更有意义:
另外,你可能还想看看
Try::Tiny
,驼鹿在内部使用,并且
* 但是做对了!以一种冷静的方式(我似乎听到很多来自驼鹿的耳语。) |
|
|
2
9
你的思维水平不够高。好的,生成器失败了。该属性仍然未定义。但是您如何处理调用访问器的代码呢?类的契约表示调用该方法将始终返回IO::文件。但现在它正在返回undef(合同是
因此,在下一行代码中,调用者将死亡(“无法对_caller.pl第42行的未定义值调用方法'readline'),因为它希望您的类遵循它定义的约定。失败不是你们班应该做的,但现在它做了。呼叫方如何解决此问题?
如果它能处理
考虑到这一点,唯一明智的解决办法就是死亡。你不能履行你同意的合同,而且
现在,如果您不准备在构建器运行时死掉,那么您需要在可能失败的代码运行时进行更改。您可以在对象构造时执行此操作,方法是使其非惰性,或者在构建中显式激活属性(
更好的选择是根本不向外界公开文件句柄,而是执行以下操作:
现在你知道程序什么时候会死;在里面
第二种方法使您的代码更加干净;使用者不需要知道类的实现,只需要知道它可以告诉它编写一些日志消息。现在调用方不关心您的实现细节;它只是告诉学生它真正想要做什么。
(无论如何,我并不完全明白“他们是个混球”。它们在C++中工作的方式完全相同,在java和Haskell和其他语言中也非常相似。这个词是什么
|
|
|
3
2
不。这没有意义,如果属性被清除,构建器将触发,如果属性在构建器中被清除,它将在您下一次调用它时触发,并保持清除状态。浪费了很多工作,只是为了 如果有效,就设置,如果无效,则继续 .
这个
如果文件句柄对任务不是必需的,那么它可能不会在具有对象访问权限的同一范围内共享。如果是这种情况,那么对象只能提供一个从对象生成文件句柄的方法。我在生产代码中这样做。不要把所有东西都变成懒惰属性,有些东西是属性的函数,把它们附加到对象上并不总是有意义的。
一种完全不同的方法是使用子类
|
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |
|
|
A.Ellett · 测试-t STDIN与-t<STDIN> 2 年前 |
|
|
con · 如何跳转到foreach迭代的特定点? 2 年前 |