ルビー勉強とか

10630 ワード

1.クイックエントリーの例:
class Man
    def initialize(name,age)
        @name = name
        @age = age
    end
    def sayname
        puts @name
    end
    def sayage
        puts @age
    end
end
m = Man.new("jiqing",22)
m.sayname
m.sayage

b = Man.new("zhangsan",9);
b.sayname
b.sayage

結果:
jiqing22zhangsan9
説明:
コンストラクション関数initialize一般関数sayname一般関数sayageはdefを関数の先頭endとして関数の末尾インスタンス化対象用クラス名とする.new()でいい
2.継承、>記号で継承
ケース:
require 'iconv'
class Man
    def initialize(name,age)
        @name = Iconv.conv('gbk', 'utf-8',name)
        @age = age
    end
    def sayname
        puts @name
    end
    def sayage
        puts @age
    end
end

class Tianen<Man
    def love
        puts Iconv.conv('gbk', 'utf-8',"")
    end
end

t = Tianen.new("  ",22)
t.sayname
t.sayage
t.love

結果:
天恩22私はお母さんを爱しています!
説明:
loveメソッドは継承されたメソッドここに中国語の文字化けを入力し、ソリューションはクラス「iconv」を導入し、その中のconvメソッドでIconvを処理する.conv('gbk','utf-8',“私は母を爱します!”)ルビーには中国語が出ないほうがいいです.
 
3.子クラスでの親メソッドの強化
superメソッドで
ケース:
require 'iconv'
class Man
    def initialize(name,age)
        @name = Iconv.conv('gbk', 'utf-8',name)
        @age = age
    end
    def sayname
        puts @name
    end
    def sayage
        puts @age
    end
end

class Tianen<Man
    def sayname
        super
        puts Iconv.conv('gbk', 'utf-8',"")
    end
end

t = Tianen.new("  ",22)
t.sayname
t.sayage

結果:
天恩私はお母さんを爱しています!22
説明:前の2つの文はsaynameメソッドから実行されます.
4.シングルステートメソッド、クラスメソッドの書き換え
ケース:
require 'iconv'
class Man
    def initialize(name,age)
        @name = Iconv.conv('gbk', 'utf-8',name)
        @age = age
    end
    def sayname
        puts @name
    end
    def sayage
        puts @age
    end
end

a = Man.new("a",6)
b = Man.new("b",7)

#     
def b.sayname
    puts "bname"
end
a.sayname
a.sayage
b.sayname
b.sayage

結果:
a6bname7
説明:
修正後,bオブジェクト吊り用の方法で出力される内容が変化する.
5.メソッドアクセス制御
Rubyではメソッドのみで関数はなく,各メソッドはクラスに存在する.メソッドをクラスで定義しない場合、このメソッドはどのクラスに属しますか?答え:Object類.RubyはこれをObjectクラスのプライベートメソッドとして実装する.
ケース:
def my
    puts "my love!"
end
my
s = "good"
s.my

結果:
my love!そして新聞を間違えた.オブジェクトsはプライベートメソッドにアクセスできません.
 
6.private、publicキーワード
ケース:
class Man
    def initialize(name,age)
        @name = name
        @age = age
    end
    private
    def sayname
        puts @name
    end
    def sayage
        puts @age
    end
    public
    def free
        puts "i am public"
    end
end
t = Man.new("tianen",22)
t.free
t.sayage
t.sayname

結果:
1番目のメソッドが2番目、3番目のメソッドを正常に出力するのに問題があります.
 
メソッドの前にアクセス権を設定するほか、メソッド定義の後に設定することもできます.
ケースは次のとおりです.
class Man
    def initialize(name,age)
        @name = name
        @age = age
    end
    def sayname
        puts @name
    end
    def sayage
        puts @age
    end
    def free
        puts "i am public"
    end
    public :free
    private :sayname,:sayage

end
t = Man.new("tianen",22)
t.free
t.sayage
t.sayname

効果は同じです