首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过S4类的插槽分派S4方法

通过S4类的插槽分派S4方法
EN

Stack Overflow用户
提问于 2013-05-07 19:03:57
回答 1查看 109关注 0票数 3

我想创建一个S4方法'myMethod‘,它不仅对函数的第一个参数的类进行调度,还对该类的一个槽的值进行调度。

例如

myObject:

@slot1="A“

@...

我希望myMethod(myObject)为slot1="A“和slot2="B”返回一些不同的东西。

我可以避免在'myObject‘的代码中硬编码'if’吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 20:23:22

一种并非完全不常见的模式是使用小类来提供多个分派。

代码语言:javascript
复制
setClass("Base")
A = setClass("A", contains="Base")
B = setClass("B", contains="Base")
My = setClass("My", representation(slot1="Base"))

setGeneric("do", function(x, y, ...) standardGeneric("do"))
setMethod("do", "My", function(x, y, ...) do(x, x@slot1, ...))

然后是处理重新调度的方法

代码语言:javascript
复制
setMethod("do", c("My", "A"), function(x, y, ...) "My-A")
setMethod("do", c("My", "B"), function(x, y, ...) "My-B")

在行动中:

代码语言:javascript
复制
>     My = setClass("My", representation(slot1="Base"))
>     a = My(slot1=A())
>     b = My(slot1=B())
>     do(a)
[1] "My-A"
>     do(b)
[1] "My-B"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16417426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档