R语言OOP的过程中,想实现继承关系,请问这段for语句的意思
谢邀。其实我对R OOP不太熟悉,不过S3还是稍微知道一点。不知道题主这段代码哪里来的,感觉还有点问题。。我们可以大致看一下# char0就是一个空的字符vectorchar0 = character(0)# 所以题主的“parents本来就是character,为何会用到for语句”的说法不对啊create \u0026lt;- function(classes=char0, parents=char0) {# mro的意思是method resolving order,一般是从子孙到祖先的一个顺序# 比如对子孙施加一个方法,先在子孙里找这个方法的实现,没有就往上到祖先 mro \u0026lt;- c(classes)# 遍历parents,把祖先全都加到mro中 for (name in parents) { mro \u0026lt;- c(mro, name)# 此处attr应为class,因为S3 method是用class属性的,而不是什么type ancestors \u0026lt;- attr(get(name),\u0026#39;class\u0026#39;) mro \u0026lt;- c(mro, ancestors) } return(mro)}光有这个生成mro的方法是不够的,还需要个生成对象的方法来调用这个mro的方法。比如可以这样写:create_instance \u0026lt;- function(value="", classes=char0, parents=char0) { obj \u0026lt;- value class(obj) \u0026lt;- create(classes, parents) return(obj)}我们再创建几个对象演示一下:Vehicle \u0026lt;- create_instance(classes="Vehicle")Wheeled \u0026lt;- create_instance(classes="Wheeled", parents="Vehicle")Car \u0026lt;- create_instance("Passat", classes="Car", parents="Wheeled")Car2 \u0026lt;- create_instance("Corolla", classes="Car", parents="Wheeled")再写一个S3方法:print.Vehicle \u0026lt;- function(x, ...) { print(paste("this is a", x))}print(Car)print(Car2)#输出 "this is a Passat" "this is a Corolla"这种继承方式有一个缺点是至少要建一个与class名字一样的instance,相对于其它面向对象语言还是比较原始的,实际上R语言的优势并不在这些上面。除非你要像Hadley那样搞的很深,否则一般用用只要大概知道S3就好了。我记得R in Action这本书里也就只讲了S3。
推荐阅读
- 西藏航空一机长执飞过程中身体不适降落后送医去世
- OC为何跌出语言榜前十
- 正点财经|
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 大三学生准备日本留学过程中要不要准备考研
- 人民车市|新语言、新起点,捷达VS7 强势入局
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- C语言 指针引用数组的地址问题
- 零基础入门学习啥语言好
- 营销型外贸网站用哪种建站程序和语言比较好呢主要是适合优化,可扩展兼容性,安全性,后期网站扩展升级
