Ruby关于类一些简单记录

[root@company ruby]# vim ruby.rb  

#!/usr/bin/env ruby
class Greeter
        attr_accessor :name
        def initialize(name="Hello World")
                @name = name;
        end
        def say_hi(age="36")
                puts "Hi #{@name} #{age}!"
        end
        def say_bye
                puts "Bye #{@name},come back soon"
        end
end

g = Greeter.new("Pat")
g.say_hi(36)
g.say_bye()
#puts Greeter.instance_methods(false)#列出类自身的方法排除继承
#puts Greeter.instance_methods()#列出全部的方法
puts g.name

puts g.respond_to?("say_hi") #对特定方法的回应是否存在

 几点说明:

@name :它是类中的实例变量 对类中的方法都实用。

attr_accessor :name 这个name外部可以访问

#{@name} :将类内部的变量插入的字符串中

#{name}  :将外部的变量插入类中的字符串中

Ruby 中不比使用retur你来从方法中返回值方法中最后一个表达式的值将作为方法的返回值

initialize是个特殊的方法 在基于类创建对象时被调用 其参数接受的是Object.new(attr,..)传递过来的参数

局部变量:基本变量成为局部变量 x=10 puts x

全局变量:在变量名之前加上($) 即可定义全局变量  $x

对象变量:变量前面有个@ 即在对象的任何方法中都能访问

类变量 :作用于整个类中 变量名前有两个 @@

类方法:self.前缀表示

class Square

  def self.test_method #类方法 或者 Square.test_method

      puts "Class'methods"

   end

end

     

对象方法:只有在创建了对象才能使用的方法 被视为 对象方法

defined?(变量名) #检测是否定义了该变量

 

 继承:Ruby不支持多重继承,是单继承

 

class ParentClass
        def method1
                puts "Method1 in Parent"
        end
end

class ChildClass < ParentClass
        def method1
                puts "Method1 in Child"
                super #调用父类中同名的方法
        end
end

p = ParentClass.new
p.method1
c = ChildClass.new

String.instance_variables #返回对象实例关联的实例变量

 

class ParentClass
        attr_accessor :name ,:age
        def initialize(name,age)
                @name = name
                @age    = age
        end
        def method1
                puts "Method1 in Parent"
        end
end

class ChildClass < ParentClass
        def method1
                puts "Method1 in Child"
                super # call the same method in parentclass
        end
end

p = ParentClass.new("liujijun",36)
p.method1
c = ChildClass.new("liaohuifang",36)#初始化父类
c.method1

 

 封装:它让某些方法和属性变得公共可用 其他对外不可见。

 

class Parent

    private#以下的方法均为私有的

    public#相反

end

 

把private当成命令向其传递一组符号参数 把这些符号表示的参数设置为私有的

class Parent

    def priavteMethod

    end

    def publicMethod

    end

    def protectMethod

    end

   protect:protectMethod

    public :publicMethod

    private :privateMethod

end

 

 多态:编写代码可以同时适用于多种类型和类的对象

嵌套类:把类放入其他的类中 如果某个类依赖于其他类 而这些其他类仅在此处有用就可以使用嵌套类。

class Drawing
        def Drawing.give_me_a_circle
                Circle.new
        end
        class Line
        end
        class Circle
                def what_am_i
                        "This is a circle"
                end
        end
end

a = Drawing.give_me_a_circle
puts a.what_am_i
b = Drawing::Circle.new
puts b.what_am_i
常量的作用域:常量定义在当前类的作用域中除非被覆写。

 

 

 模块、命名空间、掺入:

 

 

 

 

module A
        class Ruler
                attr_accessor :length
        end
end

module B
        class Ruler
                attr_accessor :length
        end
end
a = A::Ruler.new
b = B::Ruler.new

%w{}创建数组

include 命令把模块的内容放到当前的作用域中 。

 Enumerable模块:

 

 

 

 

 Comparable模块:

 

 

 

 Comparable.instance_methods
=> ["==", "between?", ">=", "<", "<=", ">"]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2012-11-24 11:55 Linux、Mongo、Php、Shell、Python、C 阅读(...) 评论(...) 编辑 收藏