ruby学習ノート(2)類の基本使用

3576 ワード

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