黑松山资源网 Design By www.paidiu.com
ruby语言跟c#的一些重要差别在于:
1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此)
2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型。(可以通过 “puts 变量.class“查看)
3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的!
...其它地方,等学习深入了再写出来
最后上一段测试代码,展示了ruby中类的基本用法:
复制代码 代码如下:
class People #跟javascript这类动态语言一样,ruby中的类也没有public,private这类访问控制标识符
def initialize(_name) #构造函数,名字是固定:initialize
@name = _name; #约定:类的私有变量以@开头
end
def to_string #类似C#中的做法,这里写一个ToString方法的ruby版
"My name is #{@name}" #ruby中方法最后一行的值,会被当作函数值返回
end
def get_name_size
return @name.length #这个方法中返回的是数字型(即名称的长度)
end
def test #类定义的最后部分,把这个方法标记为私有方法了
puts "private method(test) in People."
end
def show_name
test #私有方法,可在内部调用
puts "name = #{@name}"
end
attr_accessor:name #定义一个可读写的属性,这里也体现了ruby的一个重要思想:约定重于规范,因为@name在之前已经使用过,这里的属性只需要把@去掉,ruby就会自动智能的生成类似c#中 set{value = @name},get{return @name}的语句
private:test #标明test方法是private属性的
protected:get_name_size #标明get_name_size只能在本类或子类定义中使用(或者在子类定义中赋值给子类实例)
end
aPeople = People.new("jimmy");#创建一个People的实例
puts aPeople.to_string #调用to_string方法
#puts aPeople.get_name_size #将报错,因为该方法受保护
#puts aPeople.test #将报错,因为该方法是私有方法
aPeople.show_name
puts aPeople.name
aPeople.name = "杨俊明" #修改姓名
aPeople.show_name
#再定义一个子类
class Man < People
def initialize(_name)
super
@sex = true
end
attr_reader:sex #定义只读属性sex
def call_protected_method
puts get_name_size #调用父类的受保护方法
end
def call_protected_method2(man1)
puts man1.get_name_size #注意这里:这里可以把父类的受保护方法,动态添加到子类实例
end
def call_private_method #子类可以调用父类的私有方法!!! 这一点刚开始很不习惯
test
end
def call_private_method2(man1)
man1.test #注意这里:语法检查虽然可以通过,但是运行时会提示私有方法无法调用,这也是private与protected的区别
end
end
puts "******************************"
aMan = Man.new("jimmy.yang");
aMan.show_name
aMan.call_protected_method
puts aMan.sex
aMan.call_private_method
aMan2 = Man.new("Mike")
aMan.call_protected_method2(aMan2);
#aMan.call_private_method2(aMan2);
a = "abc";
#aMan.call_protected_method2(a); #虽然ruby本身对变量没有类型概念,但是这样却不行,即:在调用父类的受保护方法时,其实是要类型匹配的
puts aMan.class #显示aMan的类名称
运行结果如下:
复制代码 代码如下:
>ruby classDemo.rb
My name is jimmy
private method(test) in People.
name = jimmy
jimmy
private method(test) in People.
name = 杨俊明
******************************
private method(test) in People.
name = jimmy.yang
10
true
private method(test) in People.
4
Man
>Exit code: 0
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此)
2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型。(可以通过 “puts 变量.class“查看)
3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的!
...其它地方,等学习深入了再写出来
最后上一段测试代码,展示了ruby中类的基本用法:
复制代码 代码如下:
class People #跟javascript这类动态语言一样,ruby中的类也没有public,private这类访问控制标识符
def initialize(_name) #构造函数,名字是固定:initialize
@name = _name; #约定:类的私有变量以@开头
end
def to_string #类似C#中的做法,这里写一个ToString方法的ruby版
"My name is #{@name}" #ruby中方法最后一行的值,会被当作函数值返回
end
def get_name_size
return @name.length #这个方法中返回的是数字型(即名称的长度)
end
def test #类定义的最后部分,把这个方法标记为私有方法了
puts "private method(test) in People."
end
def show_name
test #私有方法,可在内部调用
puts "name = #{@name}"
end
attr_accessor:name #定义一个可读写的属性,这里也体现了ruby的一个重要思想:约定重于规范,因为@name在之前已经使用过,这里的属性只需要把@去掉,ruby就会自动智能的生成类似c#中 set{value = @name},get{return @name}的语句
private:test #标明test方法是private属性的
protected:get_name_size #标明get_name_size只能在本类或子类定义中使用(或者在子类定义中赋值给子类实例)
end
aPeople = People.new("jimmy");#创建一个People的实例
puts aPeople.to_string #调用to_string方法
#puts aPeople.get_name_size #将报错,因为该方法受保护
#puts aPeople.test #将报错,因为该方法是私有方法
aPeople.show_name
puts aPeople.name
aPeople.name = "杨俊明" #修改姓名
aPeople.show_name
#再定义一个子类
class Man < People
def initialize(_name)
super
@sex = true
end
attr_reader:sex #定义只读属性sex
def call_protected_method
puts get_name_size #调用父类的受保护方法
end
def call_protected_method2(man1)
puts man1.get_name_size #注意这里:这里可以把父类的受保护方法,动态添加到子类实例
end
def call_private_method #子类可以调用父类的私有方法!!! 这一点刚开始很不习惯
test
end
def call_private_method2(man1)
man1.test #注意这里:语法检查虽然可以通过,但是运行时会提示私有方法无法调用,这也是private与protected的区别
end
end
puts "******************************"
aMan = Man.new("jimmy.yang");
aMan.show_name
aMan.call_protected_method
puts aMan.sex
aMan.call_private_method
aMan2 = Man.new("Mike")
aMan.call_protected_method2(aMan2);
#aMan.call_private_method2(aMan2);
a = "abc";
#aMan.call_protected_method2(a); #虽然ruby本身对变量没有类型概念,但是这样却不行,即:在调用父类的受保护方法时,其实是要类型匹配的
puts aMan.class #显示aMan的类名称
运行结果如下:
复制代码 代码如下:
>ruby classDemo.rb
My name is jimmy
private method(test) in People.
name = jimmy
jimmy
private method(test) in People.
name = 杨俊明
******************************
private method(test) in People.
name = jimmy.yang
10
true
private method(test) in People.
4
Man
>Exit code: 0
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
黑松山资源网 Design By www.paidiu.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
黑松山资源网 Design By www.paidiu.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年10月10日
2024年10月10日
- 《阿瑞亚之旅》评测:更适合佛系玩家体质的跑团
- 黑神话悟空浮屠界紫门怎么开 浮屠界紫门打开方法介绍
- 黑神话悟空龟泪怎么获得 黑神话悟空龟泪获得方法介绍
- 黑神话悟空怎么获得还魂丹 黑神话悟空还魂丹获取方法一览
- HiFi顶级人声天碟《试音齐秦》wav
- 张敬轩.2012-WhyNot(EP)【环球】【WAV+CUE】
- 张小英1988-情愁[新加坡复黑版][WAV+CUE]
- 游民金币礼品补货啦 Steam充值卡等你兑换!
- 《暗喻幻想:ReFantazio》M站均分94分 近年最好的RPG游戏之一
- 今年第一项诺贝尔奖揭幕 生理学或医学奖揭晓
- 《梁静茹 华语乐坛情歌天后 爱久见人心》[WAV/分轨][360MB]
- 《田震 绝版珍藏 依然在飞》[WAV+CUE][600MB]
- 《60首经典金曲 4CD》[WAV/分轨][1.4GB]
- 赵传.1988-我很丑,可是我很温柔【滚石】【WAV+CUE】
- 遗忘曲线.2024-遗忘曲线(EP)【LuuvLabel】【FLAC分轨】