一緒にRubyを征服します! 9番目のドロップ

今日、非常に小さな低下があります。他の言語のライターにとって興味深いかもしれない、Rubyについての少しの、しかし深刻で重要な情報です。



オブジェクトの凍結





Object



クラスのfreeze



メソッドは、 Object



定数に変換することにより、オブジェクトを変更から保護します。 オブジェクトが「凍結」された後、オブジェクトを変更しようとすると、TypeErrorエラーになります。 frozen?



frozen?



オブジェクトが凍結されているかどうかを知らせます:





a = b = 'Original String'

b.freeze

puts a.frozen? # true

puts b.frozen? # true

a = 'New String'

puts a

puts b

puts a.frozen? # false

puts b.frozen? # true








変数a



b



最初に同じオブジェクトを参照するため、最初の2つの場合はtrue



です。



Rubyが自分でオブジェクトをコピーし、コピーをフリーズする場合があります。 たとえば、文字列をハッシュキーとして使用すると、Rubyはそのコピーをフリーズしてから使用します。 したがって、行が変更されても、キーには影響しません。



オブジェクトのシリアル化





Java



はオブジェクトをシリアル化する機能があり、バイナリ形式でオブジェクトをファイルに保存し、必要に応じて取得できます。 Rubyは、組み込みMarshal



ライブラリを使用して、この種のシリアル化マーシャリングを呼び出します。 主な方法はdump



load



です:



 f = File.open( 'peoples.sav', 'w' ) Marshal.dump( ["bred", "bert", "kate"], f ) f.close File.open( 'peoples2.sav', 'w' ){ |friendsfile| Marshal.dump( ["anny", "agnes", "john" ], friendsfile ) } myfriends = Marshal.load(File.open('peoples.sav' )) morefriends = Marshal.load(File.open('peoples2.sav' )) puts myfriends puts morefriends
      
      







Marshal



とは異なり、 YAML



ライブラリを使用すると、データをテキスト形式で保存できます。



モジュールと不純物





Rubyのモジュールは、一連のメソッド、定数、その他のモジュール、およびクラス定義を含むという点でクラスに似ています。 モジュールはクラスとして定義され、 class



代わりにword module



のみmodule



使用されmodule



。 クラスとは異なり、モジュールに基づいてオブジェクトを作成することはできません;モジュールはサブクラスを持つことができません。 代わりに、モジュールを使用して、クラスまたは個々のオブジェクトの欠落している機能を追加します。 モジュールは単一であり、階層と継承はありません。 (一般に、 Module



クラスにはスーパークラス-Objectがありますが、作成されたモジュールにはスーパークラスがありません)。



2つのモジュール宛先があります。 まず、これらは定数とメソッドの集中ストレージとして機能します。たとえば、次のとおりです。



 module Trig PI = 3.1416 #   def Trig.sin(x) # ... end def Trig.cos(x) # ... end end
      
      







次に、モジュールを使用すると、クラス間で機能を共有できます;モジュールをクラスにinclude



、そのメソッドがクラスに追加されます。 このメソッドは、 混合物 (mixin)と呼ばれます。



 module MyModule GOODMOOD = "happy" BADMOOD = "grumpy" def greet return "I'm #{GOODMOOD}. How are you?" end def MyModule.greet return "I'm #{BADMOOD}. How are you?" end end class MyClass include MyModule def sayHi puts( greet ) end end ob = MyClass.new ob.sayHi puts(ob.greet)
      
      







Rubyは(C ++とは異なり)多重継承を許可せず、そのmixin



置き換えます。



エピローグ





もちろん、これがRubyについて伝えたいことのすべてではありません。 ただし、実際には、純粋なRubyはそれほど興味深いものではありません。コンソールの制限を超えることはできません。 私のように、あなたは巨大なRailsトレーニンググラウンドに行きたいと思っていると思います。そこでは、言語の知識を最大限に活用し、Rubyをさらに発展させることができます。 だから私は提案しています-Rubyのドロップを調べずにRailsフレームワークに移りましょう/どうですか? できますか コメントを待っています!




All Articles