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

简介: 动态语言之所以“动态”,最明显的特征就是:类实例的行为/属性可以在new出后,动态修改!个人觉得这种处理相对java/c#(静态语言)来说,更符合现实世界。比如:一个人刚出生时,除了哭、吃奶等这些基本原始本能,其它的几乎全都不会(原始本能可理解类定义中最开始定义的属性和方法),但随着时间推移,学会了看书,走路,说话.

动态语言之所以“动态”,最明显的特征就是:类实例的行为/属性可以在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)
目录
相关文章
|
6月前
|
Ruby
|
6月前
|
Ruby
|
3月前
|
开发者 编解码
界面适应奥秘:从自适应布局到图片管理,Xamarin响应式设计全解析
【8月更文挑战第31天】在 Xamarin 的世界里,构建灵活且适应性强的界面是每位开发者的必修课。本文将带您探索 Xamarin 的响应式设计技巧,包括自适应布局、设备服务协商和高效图片管理,帮助您的应用在各种设备上表现出色。通过 Grid 和 StackLayout 实现弹性空间分配,利用 Device 类检测设备类型以加载最优布局,以及使用 Image 控件自动选择合适图片资源,让您轻松应对不同屏幕尺寸的挑战。掌握这些技巧,让您的应用在多变的市场中持续领先。
39 0
|
3月前
|
开发者 测试技术 Android开发
Xamarin 开发者的五大常见问题及解决方案:从环境搭建到性能优化,全面解析高效跨平台应用开发的技巧与代码实例
【8月更文挑战第31天】Xamarin 开发者常遇问题及解决方案覆盖环境搭建至应用发布全流程,助新手克服技术难关。首先需正确安装配置 Visual Studio 及 Xamarin 支持,设置 iOS/Android 测试环境。利用 Xamarin.Forms 和 XAML 实现高效跨平台开发,共享 UI 和业务逻辑代码。针对性能优化,采取减少 UI 更新、缓存计算结果等措施,复杂问题则借助 Xamarin Profiler 分析。
48 0
|
6月前
|
Ruby
|
6月前
|
Ruby
|
6月前
|
Ruby
|
6月前
|
Ruby
|
6月前
|
Ruby
|
6月前
|
Ruby