- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[ruby中的实例方法、类方法、单体方法、私有方法、protected方法
?对此略懂, 简单解答下你的问题, 这块确实是ruby深入理解的关键点.?首先,要明白一点: Ruby一切皆对象.?什么意思呢? Ruby一个类也是一个对象(使用XX.class知道它的类是Class),它也具备方法(即所谓的类方法). 这个可以称之谓元类(MetaClass)?而Ruby中调用方法逻辑很简单:?1. 查询该对象所属类中的所有方法,如果存在调用之,如果不存在则调用父类的方法.?2. 如果回溯到顶级类,还不存在则调用method_missing, 默认抛出NoMethodError异常.?那分析下该输出?i1 = T1.new?puts i1.get_v1: #{i1.get_v1} #输出 bbb in init? ##i1属于类T1的实例,调用T1的方法get_v1,得到结果.?puts T1.get_v1: #{T1.get_v1} #输出 ! aaa ! ##这里调用T1的元类,即所写的self.get_v1, 得到 ! aaa !?puts i1.v1: #{i1.v1} #输出 bbb in init ##与第一个一致, 值得一提,attr_xx 系列方法是一个魔法,是Module中提供的方法,用在这里生成新的方法.?puts i1.get2: #{i1.get2} #输出?? ! @@ v2 ! ##这个类变量输出,通过实例取得类变量的值.?puts i1.get3: #{i1.get3} #输出 @@ v3 in init ##同上?puts i1.v3: #{i1.v3} #输出这里是空的 ## 未赋值,当然是空的. 记住在方法中self指向类,而在类中self指向元类.所以在类中使用@var赋值,这个变量属于元类而不是你期望的类.?puts i1.vtest: #{i1.vtest} #输出 vtest ## 这个同之前的分析?#puts T1.vtest: #{T1.vtest} 报错? ##元类不存在该方法,当然报错,你可以使用 class self?#attr_reader :vtest?#end?来打开元类的该方法,当然再赋个值,要不是空值.?1、ruby中的实例方法和Java等其他语言的定义类似irb(main):065:0 class Dogirb(main):066:1?? def runirb(main):067:2???? puts Im running!irb(main):068:2?? endirb(main):069:1 end= nilirb(main):070:0 dog = Dog.new= #Dog:0x7fabbbefd918 @name=Dogirb(main):071:0 dog.runIm running!2、类方法定义时需要在方法名前加入类名称或者self关键字irb(main):059:0 class Dogirb(main):060:1?? def Dog.species??? #或者 def self.speciesirb(main):061:2???? puts I belong to the canineirb(main):062:2?? endirb(main):063:1 end= nilirb(main):064:0 Dog.speciesI belong to the canine注意:在ruby中类方法只能被类对象调用,不能被实例对象调用。在这里就是指:species方法只能这样调用Dog.species,而不能这样调用Dog.new.species。这与Java中不同(Java中类只能调用类方法,而实例既可以调用实例方法,也可以调用类方法)。3、单体方法只在该对象上起作用irb(main):072:0 dog1 = Dog.new= #Dog:0x7fabbbef6208 @name=Dogirb(main):073:0 def dog1.speakirb(main):074:1?? puts Im talkingirb(main):075:1 end= nilirb(main):076:0 dog1.speakIm talking= nilirb(main):077:0 dog2 = Dog.new= #Dog:0x7fabbbedfc88 @name=Dogirb(main):078:0 dog2.speakNoMethodError: undefined method `speak for #Dog:0x7fabbbedfc88 @name=Dog??????? from (irb):78??????? from :04、和Java一样,用private标识私有方法。但ruby中的私有方法可以在子类中调用(Java中只允许在
您可能关注的文档
- [Ps绘制渐变质感风格小图标.docx
- [PTA指标对聚酯生产的影响.doc
- [Push介绍.doc
- [PTC010501思维方式决定人生结果2-2.doc
- [PublicRelations公关概论.doc
- [PWIS5.0操作参考资料.doc
- [P开头单词.doc
- [Qchat技术.docx
- [pyfa.doc
- [ps金属质感字教程.doc
- 黑龙江省牡丹江市第一高级中学2024年高考生物考前最后一卷预测卷含解析.doc
- 2025年云南省沾益县第四中学高三三月(在线)模拟考试语文试题试卷含解析.doc
- 渤海船舶职业学院 《医学昆虫学》2023-2024学年第一学期期末试卷.doc
- 江苏省马坝中学2024届高三3月份第一次模拟考试生物试卷含解析.doc
- 2025年成人高考《语文》古诗文背诵与写作技巧试题.docx
- 2025年成人高考《语文》古诗词主题与思想内涵解析试题库.docx
- 常州大学怀德学院《即兴伴奏与弹唱(一)》2023-2024学年第一学期期末试卷.doc
- 2025年成人高考《语文》古诗词情感表达与审美体验试题库.docx
- 2025年成人高考《语文》写作素材积累:艺术鉴赏在写作中的应用试题.docx
- 志愿填报指导家长会课件.pptx
文档评论(0)