R6 хранить методы по ссылке вместо копирования

Я создаю несколько объектов R6 одного и того же класса, мой cl Класс содержит несколько тяжелых методов.
Как я понимаю - код ниже - кажется, что у каждого объекта есть своя копия всех методов.
Как я могу иметь одну копию методов для всех моих cl объекты? S3 хранит только одну копию метода, не так ли?
Я хочу масштабировать его на тысячи cl объекты так предпочли бы опустить накладные расходы.

library(R6)
cl <- R6Class(
  classname = "cl",
  public = list(
    a = numeric(),
    b = numeric(),
    initialize = function(x){ self$a <- rnorm(1, x); self$b <- rnorm(1, x) },
    heavy_method = function() self$a + self$b,
    print = function() self$heavy_method())
)
group_of_cl <- lapply(1:3, cl$new)
lapply(group_of_cl, ls.str)
## [[1]]
## a :  num 1.7
## b :  num 0.898
## heavy_method : function ()  
## initialize : function (x)  
## print : function ()  
## 
## [[2]]
## a :  num 2.64
## b :  num -0.29
## heavy_method : function ()  
## initialize : function (x)  
## print : function ()  
## 
## [[3]]
## a :  num 3.66
## b :  num 1.72
## heavy_method : function ()  
## initialize : function (x)  
## print : function ()
library(data.table)
sapply(lapply(group_of_cl, `[[`, "heavy_method"),address)
## [1] "0x31de440" "0x3236420" "0x32430a8"

1 ответ

Решение

Ты не должен беспокоиться об этом.

Замыкания в R. очень быстрые. Под капотом у него, вероятно, есть несколько тактов оптимизации, позволяющих распознавать дубликаты определений функций и хранить их в одном месте.

Другие вопросы по тегам