[Ruby]タイプと方法


1.標準タイプ
1.1数値
Rubyは整数と浮動小数点数をサポートします.整数は任意の長さであり、一定範囲の整数は内部にバイナリ形式で格納され、Fixnumクラスのオブジェクトであり、範囲外の整数はBugnumクラスのオブジェクトに格納されます.Rubyは、それらの間の往復変換を自動的に管理します.
整数を書くときは、オプションのプリアンブルを使用し、オプションの進数インジケータ(0 bはバイナリ、0は8進数、0 dは10進数、0 xは16進数)を使用し、後に1つの指が適切に進数され、下線は数字列で無視されます.
小数点またはべき乗を持つ数字の字面量は浮動小数点オブジェクトに変換され、小数点の前後に「1.0 e 3」を「1.e 3」と書く必要があり、RubyはFixnumクラスのe 3メソッドを呼び出そうとします.
整数は、timesが回数を表すなど、いくつかの反復器もサポートします.たとえば、次のようにします.
6.times {puts '-'}

さらにuptoとdowntoは、2つの整数の間でそれぞれ上下に反復します.たとえば、次のようにします.
1.upto(10) {|i| puts i}
10.downto(1) {|i| puts i}

Numericクラスは、次のようなより一般的なstepメソッドを提供します.
1.step(100, 10) {|i| puts i}

1.2文字列
Ruby文字列は8バイトのシーケンスであり、通常は印刷可能な文字を含むが、これは必要条件ではなく、文字列には2進データも含まれ、文字列はStringクラスのオブジェクトである.
文字列の字面量には、「」などの様々なエスケープシーケンスを配置し、リターン改行を表すことができます.また、「#{}」シーケンスを使用して、任意のRubyコードの値を文字列に入れることができます.コードがグローバル変数、クラス変数、またはインスタンス変数である場合、カッコは無視できます.
文字列の字面量を構築するには3つの方法があります.「%q」と「%Q」は、それぞれ、単一引用符と二重引用符の文字列の定義を開始します.たとえば、次のようになります.
%q/Hello World!/
%Q/Hello #{name}/

qまたはQの後に続く文字は境界記号であり、一致する終了記号が発見されるまで文字列が読み出されます.そうしないと、次の同じ境界記号が現れるまで文字列が読み出されます.
最後に、here documentを使用して文字列を構築できます.たとえば、次のようになります.
string = <<END_OF_STRING
  Hello World!
  Hello John!
END_OF_STRING

「here document」は、ソース・ファイル内の行が「<<」文字の後ろに含まれていない終了文字列を示す行で構成されています.「<<」文字の後ろにマイナス記号を置くと、次のようにして、終了文字をインデントできます.
string = <<-END_OF_STRING
  Hello World!
  Hello John!
  END_OF_STRING

Rubyには75以上の標準的な方法があります.たとえば、String#chmopの方法では、先頭と末尾のスペースを除去できます.たとえば、次のようにします.
puts "Hello World!\r
".chomp

String#splitメソッドでは、正規表現に基づいて文字列を分割できます.たとえば、次のようになります.
stringlist = 'Hello John!'.split(/ /)
puts stringlist[1]

String#squeezeメソッドでは、次のような重複文字を削除できます.
puts 'Hello World!!!'.squeeze('!')

String#scanメソッドは、文字列から正規表現に一致する要素を抽出します.たとえば、次のようにします.
puts 'Hello World!'.scan(/e.*l/)

1.3区間
区間の最初で最も自然な使い方は表現シーケンスで、Rubyでは「.」を使います.と「...」[区間](Interval)オペレータを使用してシーケンスを作成します.2つの点の形式は、閉じた区間を作成し、3つの点の形式は、右端の値を含まない半閉じた区間を作成します.to_を使用できますaメソッドは区間を配列に変換し、例えば:
(1..10).to_a
('bar'..'bat').to_a

区間は、反復可能な多くの方法を実装し、次のような方法でコンテンツをテストします.
digits = 0..9
digits.include?(5)
digits.min
digits.max
digits.reject {|i| i<5}
digits.each {|digit| dial(digit)}

Rubyは、自分が定義したオブジェクトに基づいて区間を作成できます.唯一の制限は、これらのオブジェクトがsuccに対する応答としてシーケンス内の次のオブジェクトを返さなければならないことです.また、これらのオブジェクトは「<=>」を使用して比較できる必要があります.「<=>」オペレータは、2つの値を比較し、最初の値が2番目の値より小さいか、等しいか、またはそれより大きいかに基づいて、-1、0または+1を返します.たとえば、次のようにします.
class Test
  include Comparable
  attr :value
  def initialize(value)
    @value = value
  end
  def <=>(other)
    self.value <=> other.value
  end
  def succ
    Test.new(@value.succ)
  end
end
myvalue = Test.new(1)..Test.new(9)
myvalue.to_a
myvalue.include?(Test.new(2))

区間は条件式として使用できます.区間の第1の部分の条件がtrueの場合、それらは開き、区間の第2の部分の条件がtrueの場合、それらは閉じます.たとえば、次のようにします.
while line = gets
  puts line if line =~ /start/ .. line =~ /end/
end

区間のもう1つの方法は、間隔テストです.いくつかの値が区間表現の間隔に入るかどうかを確認するには、「===」オペレータを使用します.たとえば、次のようにします.
(1..10) === 5

1.4正規表現
正規表現は、パターンに基づいて文字列をマッチングするために使用されます.Rubyは組み込みのサポートを提供し、マッチングと置換をより便利かつ簡明にします.正規表現はRegexpタイプのオブジェクトです.たとえば、呼び出しコンストラクタを表示するか、字面量形式「/pattern/」と「%r{pattern}」を使用して作成できます.
Regexp.new('^[a-z]+')
/^[a-z]+/
%r{^[a-z]+}

正規表現オブジェクトがあれば、Regexp#matchまたはマッチングオペレータ"=~"と"!~"を使用して文字列をマッチングできます.一致オペレータは、StringオブジェクトとRegexpオブジェクトを定義します.たとえば、次のようになります.
name = 'John'
name =~ /o/
/a/ =~ name

一致オペレータは、いくつかのRuby変数を設定する一致が発生した文字の位置を返します.「$&」はパターンに一致する文字列を得、「$`」は一致する前の文字列を得、「$'」は一致した後の文字列を得る.
各正規表現には、文字列を正規表現と一致させるためのモードが含まれます.特殊文字の前に反斜線を配置すると、文字の量に一致します.
2.方法
2.1定義方法
キーワードdefを使用してメソッドを定義できます.メソッド名は小文字で始まる必要があります.クエリを表すメソッド名は、通常「?」エンディング、例えばinstance_of?.受信者オブジェクトのメソッドが変更され、「!エンディング、例えばchopとchop!、1つ目のメソッドは、変更された文字列を返し、2つ目はその場でオブジェクトを変更します.割り当てられるメソッドは、「=」という等号で終わります.
メソッドには、カッコにリストされているローカル変数であるパラメータも宣言する必要があります.メソッドパラメータの両方のかっこはオプションです.たとえば、次のようになります.
def method1(arg1, arg2, arg3)
end
def method2
end

Rubyでは、メソッドパラメータのデフォルト値を指定できます.たとえば、次のようになります.
def method(arg='John')
end

可変数のパラメータを入力したり、1つのパラメータで複数のパラメータを受信したりするには、パラメータ名にアスタリスク「*」を配置します.たとえば、次のようにします.
def method(*arg) 
end

メソッドを呼び出すと、1つのblockで関連付けることができ、通常yieldを使用してメソッドの内部からこのblockを呼び出すことができます.ただし、メソッド定義の最後のパラメータ接頭辞が「&」の場合、関連するblockはProcオブジェクトに変換され、このパラメータに値が割り当てられます.たとえば、次のようにします.
def method(&block)  
  block.call()
end
method() {puts "Hello World!"}

2.2呼び出し方法
メソッドは、受信者、メソッドの名前、オプションのパラメータ、blockを指定して呼び出すことができます.クラスメソッドまたはモジュールメソッドでは、受信者はクラスまたはモジュールの名前です.受信者が省略されている場合、デフォルトはselfです.呼び出されるメソッドごとに値が返されます.Rubyには現在実行されているメソッドから終了できるreturn文があり、returnが必要でない場合はメソッド実行の最後の文実行の結果を返します.
メソッド定義では、正規のパラメータの前にアスタリスクを付けると、このメソッド呼び出しに入力された複数のパラメータが配列にロードされます.配列を分解する場合は、配列パラメータの前にアスタリスク「*」を付けます.たとえば、次のようにします.
def method(args1, args2, args3)
  puts "#{args1} #{args2} #{args3}"
end
method(1, 2, 3)
method(1, *[2, 3])

本文は“青鋒ノート”のブログから出て、転載をお断りします!