![]() |
1
25
我假设这不直接适用于你,但如果你正在开发生物导体的封装,有一个动机使用S4,因为他们积极鼓励它的使用,并已为十年的大部分时间-所以所有的核心封装大量使用S4。 我发现所有额外的开销都是一个难题——setGeneric、setMethod、处理名称空间等等。也就是说,我发现它强加的结构、潜在的可扩展性和其他类似的东西都是值得的。与所有事情一样,这也涉及到权衡。我认为它可以更干净-我不喜欢S3方法如何简单地通过命名约定来伪装(食品类). 尽管如此,我倾向于避免在自己的代码中大量使用S4,除非别人告诉我这样做。 |
![]() |
2
27
澄清一下:S4有一些巧妙的特性(例如,多参数调度和时隙类型检查),但是我没有遇到特性超过成本的情况。成本的例子包括:任何槽的更改都需要一个完整的对象副本,并且(可能更糟)正在进行的对S4方法的更改。 简而言之,我喜欢S4背后的想法,但我会等待它成熟后再在我自己的代码中使用它。 |
![]() |
3
9
我从未使用过,也不打算使用,原因如下:
|
![]() |
4
9
为了扩展动物轨迹数据的空间(sp)类,我学习了S4。它是从可用选项中选择的最佳选项(最一致、最通用且与许多GIS定义紧密匹配),以避免从头开始编写所需的所有内容。我不觉得S4像很多人说的那样繁重,但我现在习惯于探索像这样的物体的底层结构。表现也不错,我觉得可以做得很好,虽然做得不好也有表现陷阱。 如果您对空间数据感兴趣,那么spatstat是一个很好的例子,说明了如何在S3中执行许多与sp类似的操作(就像所有看似空间的东西一样……)不同软件中的数据结构之间几乎没有清晰的相似之处。 |
![]() |
5
6
S4类在空间统计(sensu)中扮演着重要的角色
|
![]() |
6
5
别忘了还有R.oo(在CRAN上),它提供了在R中执行oo的第三种方法。在我看来,这提供了一个oo系统,对于从其他系统迁移过来的程序员来说可能更为熟悉——特别是没有通用函数(这样print(foo)就必须在foo类上调度),方法与对象绑定,所以你会做Fo$PrimeTo()——就像Python或C++一样食品印刷(). |
![]() |
7
4
我不幸地创建了一些函数,这些函数需要同时使用S3和S4类的方法。多年来,让这段代码继续工作是非常痛苦的,因为R-core已经多次更改了这些系统如何交互、名称空间如何工作以及Rcmd check如何工作的细节。 如果你不喜欢Google的风格指南,那么考虑一下这些著名的R包开发人员的评论 R-help 弗兰克·哈雷尔 特里·塞尔诺写道: 1讨厌的写作 2调试困难 三。能够编写非常晦涩的代码 4设计 S4增益: 5指导自动转换的能力 6验证类对象的内容 |
![]() |
Rational Redneck · Java结构化方法链接 2 年前 |
![]() |
KianQ · 如何从数组生成SQL Update语句 2 年前 |
![]() |
AJA SMBAT · 我在获取列表而不是绑定方法时遇到问题 2 年前 |
![]() |
dsdsds sdsds · .pop()从原始列表中删除元素[重复] 2 年前 |
![]() |
MatÄj VondráÄek · 如何在c#方法中传递类型? 2 年前 |
![]() |
AISAN · 找不到令人兴奋的符号?[重复] 3 年前 |