如何在 Perl 对象中定义预增量/后增量行为?
日期::简单
对象显示此行为,其中 $date++
返回第二天的日期。
Date::Simple 对象是不可变的。将 $date1 分配给 $date2 后,对 $date1 的任何更改都不会影响 $date2。例如,这意味着没有像 set_year 操作这样的操作,并且 $date++ 为 $date 分配了一个新对象。
如何自定义对象的前/后增量行为,以便 ++$object
或 $object--
执行特定操作?
我浏览过perlboot,perltoot, perltooc和 perlbot,但我没有看到任何示例说明如何做到这一点。
Date::Simple
objects display this behavior, where $date++
returns the next day's date.
Date::Simple objects are immutable. After assigning $date1 to $date2, no change to $date1 can affect $date2. This means, for example, that there is nothing like a set_year operation, and $date++ assigns a new object to $date.
How can one custom-define the pre/post-incremental behavior of an object, such that ++$object
or $object--
performs a particular action?
I've skimmed over perlboot, perltoot, perltooc and perlbot, but I don't see any examples showing how this can be done.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要
重载
。You want
overload
.如果您查找 perlfaq7 你会发现答案是使用重载< /a> pragma,尽管他们可能可以给常见问题解答问题一个更好的名称(在我看来)。
基本上(假设
$a
是SomeThing
类的对象,而$b
不是),上面的代码会重载$a + $b
为$a->myadd($b, 0)
且$b + $a
为$a->myadd($b, 0)
myadd($b, 1) (也就是说,第三个参数是一个布尔值,表示“该运算符的参数是否翻转”并且保留第一个参数是 self 语法),对于 < 也是如此代码>-和<代码>mysub。阅读文档以获得完整的解释。
If you look up perlfaq7 you'll find that the answer is to use the overload pragma, though they probably could have given the FAQ question a better name (in my opinion).
Basically (assuming
$a
is an object of theSomeThing
class and$b
isn't), the above would overload$a + $b
to be$a->myadd($b, 0)
and$b + $a
to$a->myadd($b, 1)
(that is, the third argument is a boolean meaning "were the arguments to this operator flipped" and the first-argument-is-self syntax is preserved), and the same for-
andmysub
.Read the documentation for the full explanation.