默认情况下,不要打印类实例的所有插槽

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了默认情况下,不要打印类实例的所有插槽相关的知识,希望对你有一定的参考价值。

我编写了通过在给定矩阵上完成操作历史添加一个插槽来扩展矩阵的类。

setClass("newMatrix", representation(history = "character"),  contains = "matrix")

我希望这个类的实例充当矩阵,所以我只想默认打印出.Data插槽,并且要通过函数调用历史记录。

m <- new("newMatrix", 1:4, 2, 2, history = "ipsum")
> m
An object of class "newMatrix"
     [,1] [,2]
[1,]    1    3
[2,]    2    4
Slot "history":
[1] "ipsum"

是否有一种方法可以默认只进行R打印。此类的数据槽,如下所示:

> m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
答案

鉴于您处于S4设置,最好的方法是定义一个show方法:

setClass("newMatrix", representation(history = "character"),  contains = "matrix")
m <- new("newMatrix", 1:4, 2, 2, history = "ipsum")

setMethod("show",
          "newMatrix",
          function(object){
            show(object@.Data)
          })

如果你需要一个单独的print方法,你还需要提供一个S4方法。避免S3 / S4冲突的经典构造如下:

print.newMatrix <- function(x, ...){
 print(x@.Data)

}

setMethod("print",
          "newMatrix",
          print.newMatrix)

构建一个单独的print方法并不是必需的,因为print()将使用show()方法,如果它找不到类printnewMatrix方法。

您可以只创建S3方法,但这会让您遇到麻烦,如帮助页面?Methods_for_S3所述

(见:https://www.rdocumentation.org/packages/methods/versions/3.4.3/topics/Methods_for_S3

另一答案

是的,您可以为您的班级添加print方法:

print.newMatrix <- function(x, ...) {
  print.default(x@.Data, ...)
}

> print(m)
     [,1] [,2]
[1,]    1    3
[2,]    2    4

以上是关于默认情况下,不要打印类实例的所有插槽的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 dralogfragment 实例的情况下从适配器显示对话框片段?

打印信号/插槽的跟踪称为

在不丢失默认信号参数的情况下将额外参数传递给 PyQt 插槽

vue核心基础-插槽

Vue.js 将数据从插槽传递到组件实例

Vue3 slot插槽——(默认插槽具名插槽作用域插槽)