【问题标题】:How to find all functions with methods for a given class如何使用给定类的方法查找所有函数
【发布时间】:2023-03-09 09:10:01
【问题描述】:

我基本上是在寻找 methods(some_function) 的反面,它返回该函数存在的所有类方法。是否有一些简单的方法可以搜索所有对给定对象类具有显式 method 的函数?
例如,methods(my_func) 返回一堆 myfunc.classname 值。是否有一个 functions(my_class) 可以使用 func.my_class 方法返回所有函数?

【问题讨论】:

    标签: r


    【解决方案1】:

    我认为您想在methods 中为class 提供一个参数,而不是为generic.function 提供任何参数。比较

    methods(as.matrix) 
    [1] as.matrix.data.frame              as.matrix.data.table*             as.matrix.default                
    [4] as.matrix.dist*                   as.matrix.noquote                 as.matrix.POSIXlt                
    [7] as.matrix.raster*                 as.matrix.SpatialGridDataFrame*   as.matrix.SpatialPixelsDataFrame*
    

    有了这个,它返回泛型类的方法

    methods(class="matrix")
     [1] anyDuplicated.matrix  as.data.frame.matrix  as.data.table.matrix* as.raster.matrix*     boxplot.matrix        corresp.matrix*      
     [7] determinant.matrix    duplicated.matrix     edit.matrix*          head.matrix           isSymmetric.matrix    lda.matrix*          
    [13] qda.matrix*           relist.matrix*        subset.matrix         summary.matrix        tail.matrix           unique.matrix        
    
       Non-visible functions are asterisked
    

    这似乎也适用于 S4 类,例如

    methods(class="data.table")
     [1] $<-.data.table*           [.data.table*             [<-.data.table*           all.equal.data.table*     as.data.frame.data.table*
     [6] as.data.table.data.table* as.list.data.table*       as.matrix.data.table*     dim.data.table*           dimnames.data.table*     
    [11] dimnames<-.data.table*    duplicated.data.table*    format.data.table*        head.data.table*          is.na.data.table*        
    [16] merge.data.table*         na.omit.data.table*       names<-.data.table*       Ops.data.table*           print.data.table*        
    [21] subset.data.table*        tail.data.table*          transform.data.table*     unique.data.table*        within.data.table* 
    

    【讨论】:

    • 谢谢。这样就可以了。
    • 现在这很可悲:一年后我完全忘记了我问过这个问题。感谢 SO 的搜索工具 :-)
    【解决方案2】:

    我认为您是在描述自省和反射的概念(在 Java 中众所周知)。

    一篇关于 Java 内省和反射的帖子,链接在这里:Java introspection and reflection

    我不知道您使用的是哪种技术或语言,但也许您会找到等效的。

    希望这会有所帮助!再见 !

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 1970-01-01
      • 2016-10-24
      • 2018-04-24
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多