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。


    推荐阅读