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