一緒に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


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

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

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



Javaはオブジェクトをシリアル化する機能があり、バイナリ形式でオブジェクトをファイルに保存し、必要に応じて取得できます。 Rubyは、組み込みMarshalライブラリを使用して、この種のシリアル化マーシャリングを呼び出します。 主な方法はdumploadです:

 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フレームワークに移りましょう/どうですか? できますか コメントを待っています!

Source: https://habr.com/ru/post/J49353/


All Articles