首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套函数的复杂对象初始化范围问题

嵌套函数的复杂对象初始化范围问题
EN

Stack Overflow用户
提问于 2009-10-19 02:44:16
回答 1查看 374关注 0票数 3

好的,所以我尝试使用S4类来构建一个非常复杂的对象,其中的插槽包括六个矩阵,几个列表,可能还有一个或两个厨房水槽。对象是通过引用和解压缩我已经定义的配置对象来初始化的。用setClass()定义类很容易,但我很难找到一种优雅的方法来设置setMethod中的插槽(“初始化”)。

问题是,我需要根据配置对象的部分来设置这些矩阵的特定元素。对于配置对象的每个元素,我可能必须设置几个矩阵的特定元素。注意,矩阵位于初始化函数的作用域/环境中。然后,我在初始化函数中有嵌套函数,它执行对矩阵的实际赋值,或者无论如何都是这样。当然,这些函数可以看到矩阵,但是它们不能修改它们,因为如果在当前环境中没有定义原始变量,<-运算符就会创建一个新的矩阵。R是按值传递的,而且是真的.对于我试图初始化的.Object插槽,甚至也是如此。所以我不能使用嵌套函数来进行初始化。

不幸的是,这些嵌套函数必须修改几个矩阵,因此返回值和在主初始化函数中执行赋值是不实际的,也不优雅。(但是,如果我将矩阵的副本填充到返回的列表中,然后将它们合并到主初始化函数中,这是可能的。虽然很难看,但是需要大量额外的代码。)

迭代(这将防止这个作用域问题)也不太实际,因为配置对象的分层性质,它确实希望使用递归调用来遍历。

我能想到的最后一个选项是使用assign()函数和envir选项来强制赋值应用于非局部变量。但使用这样的环境似乎很讨厌,就像goto的声明.

那么,最盗版的方法是什么呢?坚持纯粹的函数式编程,构建丑陋的数据结构,只是为了不有效地传递冗余矩阵?尝试找到一种完全避免函数的迭代解决方案?通过玩环境来使用深魔法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-19 12:46:46

你看过<<-吗?它使父环境中的赋值变得更容易一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1586744

复制
相关文章

相似问题

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