• ruby学习笔记(4)动态修改类的属性


    动态语言之所以“动态”,最明显的特征就是:类实例的行为/属性可以在new出后,动态修改!个人觉得这种处理相对java/c#(静态语言)来说,更符合现实世界。

    比如:一个人刚出生时,除了哭、吃奶等这些基本原始本能,其它的几乎全都不会(原始本能可理解类定义中最开始定义的属性和方法),但随着时间推移,学会了看书,走路,说话...(相当于新增了方法/属性),再往后的人生谁也无法预料,一切都是未知的,所以不太可能象静态语言那样,在运行前就事先把所有的属性/方法全写齐,甚至一个人后来失忆,把原先学会的东西给忘记了也没准(比如突然不会说话了,相当于把实例的方法/属性给动态删除),后来医治好以后,又能说话了(重新添加某种方法)。

    当然我的意思也并非静态语言不好,只能说各有各的特点,最后来一段代码吧:

    class Person
    	def cry
    		puts "哇..."
    	end
    	
    	def eat
    		puts "吃奶中,请勿打扰..."
    	end
    	
    	def showbody
    		puts "裸奔一下,展示自己的身体" #这个方法写得比较龌龊 ;)
    	end
    end
    
    aPerson = Person.new #创造了一个新生儿
    aPerson.cry #刚出生,当然要哭几下
    aPerson.eat #哭累了,就吃
    aPerson.showbody #小孩子嘛,随便给看一下小JJ无所谓啦
    
    class Person
    	def read
    		puts "学会了看书"
    	end
    	
    	def walk
    		puts "学会了走路"
    	end
    end
    
    aPerson.walk
    aPerson.read
    
    class Person
    	undef read #后来因为某种原因,突然不会读书了,也许得了什么怪病吧:)
    end
    
    #aPerson.read #这里将报错"undefined method `read' for #<Person:0x39162f0> (NoMethodError)"
    
    class Person
    	private:showbody #长大了以后,当然就不能随便给陌生人看自己的身体了 :)
    end
    
    #aPerson.showbody #将报错:private method `showbody' called for #<Person:0x35d5f70> (NoMethodError)
    
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    mybatis N+1问题解决
    Best Time to Buy and Sell Stock
    119. Pascal's Triangle II
    HBuilder打包ios
    关于JavaScript/TypeScript中的setTimeout和setInterval
    白色透明渐变css
    AntV 在小程序中的使用
    AntV 在h5页面中的使用
    js处理后端返回超过16位大数字方案(network中preview和response返回不一致)
    m站taro编译css的时候有些属性会被编译掉,如果遇到这个问题,用第一行代码,写到无法编译的代码上面
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1667441.html
Copyright © 2020-2023  润新知