ruby学习笔记:ruby 学习笔记(2) 类的基本使用

ruby语言跟c#些重要差别在于:
1.ruby是动态语言c#是静态语言--即对象在出来以后ruby还可以动态给对象例子添加些属性或思路方法(javascript也是如此)
2.ruby中刻意弱化了变量类型这个概念默认情况下变量/思路方法都不需要声明具体(返回)类型但其实在ruby内部会自动根据变量值分配类型(可以通过 “puts 变量.“查看)
3.ruby相对c#来讲可能有些雷地方在于:父类中private成员居然是可以在子类中使用
...其它地方等学习深入了再写出来
最后上段测试代码展示了ruby中类基本使用方法:
复制代码 代码如下:

People #跟javascript这类动态语言ruby中类也没有public,private这类访问控制标识符
def initialize(_name) #构造名字是固定:initialize
@name = _name; #约定:类私有变量以@开头
end
def to_ #类似C#中做法这里写思路方法ruby版
"My name is #{@name}" #ruby中思路方法最后会被当作值返回
end
def get_name_size
@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#中 {value = @name},get{ @name}语句
private:test #标明test思路方法是private属性
protected:get_name_size #标明get_name_size只能在本类或子类定义中使用(或者在子类定义中赋值给子类例子)
end
aPeople = People.("jimmy");#创建个People例子
puts aPeople.to_ #to_思路方法
#puts aPeople.get_name_size #将报错该思路方法受保护
#puts aPeople.test #将报错该思路方法是私有思路方法
aPeople.show_name
puts aPeople.name
aPeople.name = "杨俊明" #修改姓名
aPeople.show_name
#再定义个子类
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.("jimmy.yang");
aMan.show_name
aMan.call_protected_method
puts aMan.sex
aMan.call_private_method
aMan2 = Man.("Mike")
aMan.call_protected_method2(aMan2);
#aMan.call_private_method2(aMan2);
a = "abc";
#aMan.call_protected_method2(a); #虽然ruby本身对变量没有类型概念但是这样却不行即:在父类受保护思路方法时其实是要类型匹配
puts aMan. #显示aMan类名称


运行结果如下:
复制代码 代码如下:

>ruby Demo.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
Tags:  如何学习ruby ruby学习资料 ruby学习 ruby学习笔记

延伸阅读

最新评论

发表评论