发布于 2016-02-03 02:15:42 | 173 次阅读 | 评论: 0 | 来源: 网友投递
Ruby编程语言
Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。
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