Fendo181 / RoRTutorial_chap04

0 stars 0 forks source link

演習7(4.4.1,4.4.2) #8

Closed Fendo181 closed 7 years ago

Fendo181 commented 7 years ago

4.4.1

(1)

1から10の範囲オブジェクトを生成するリテラルコンストラクタは何でしたか? (復習です)

irb(main):001:0> (1..10).class
=> Range

(2)

今度はRangeクラスとnewメソッドを使って、1から10の範囲オブジェクトを作ってみてください。ヒント: newメソッドに2つの引数を渡す必要があります

irb(main):007:0> num = Range.new(1,10)
=> 1..10

(3)

比較演算子==を使って、上記2つの課題で作ったそれぞれのオブジェクトが同じであることを確認してみてください。

p (1..2) == Range.new(1,2)
true
=> true

4.4.

(1)

Rangeクラスの継承階層を調べてみてください。同様にして、HashとSymbolクラスの継承階層も調べてみてください。

#Range クラス

irb(main):002:0> (1..10).class
=> Range
irb(main):003:0> (1..10).class.superclass
=> Object

#Hashクラス
irb(main):008:0> a = {a:"endo"}
=> {:a=>"endo"}
irb(main):009:0> a.class
=> Hash
irb(main):010:0> a.class.superclass
=> Object

#Symbolクラス
 user = {name: "Takahashi",city:"tokyp"}
=> {:name=>"Takahashi", :city=>"tokyp"}
irb(main):012:0> user[:name].class
=> String
irb(main):013:0> user[:name].class.superclass
=> Object
irb(main):014:0>

(2)

リスト 4.15にあるself.reverseのselfを省略し、reverseと書いてもうまく動くことを確認してみてください。

うまく行った。

# String クラスを継承する。
class World < String
  def palindrome?
    # selfはオブジェクト自身
    self == reverse
  end
end
w = World.new("level")
puts w.palindrome?
 # String
puts w.length