ようへいの日々精進XP

よかろうもん

2018 年 07 月 09 日 (月)

ジョギング

  • 香椎浜 x 2 周
  • なんかギクシャクした感じがずーっと続いている

日課

  • (腕立て x 50 + 腹筋 x 50) x 3

梅雨明け

  • すごい爪痕を残して梅雨が明けた
  • 被災された方々には心からお見舞い申しあげます
  • これから暑さも含めた戦いが待っているのかと考えると, たかが雨, されど雨, すごく胸が痛くなった

放送大学に提出していたレポートが添削されて返ってきた

  • 読みづらい文字だったけど, ちゃんと赤ペン入れてくれていた
  • 一応, 単位認定試験の受験資格を得ることが出来た

今日のるびぃ ~ REx - Ruby Examination にチャレンジ (48) ~

REx - Ruby Examination の問題を自分なりにアレンジした上で 1 〜 3 問くらいずつ解いていく. 正直言ってかなり難しい. 尚, irb に動作確認環境は以下の通り.

$ ruby --version
ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux]
$ irb --version
irb 0.9.6(09/06/30)

アクセサメソッド

以下のコードにおいて, 指定した行を書き換えた時に同じ結果になるものを選べ(複数選択)

class C
  attr_accessor :v # ここを書き換える
end

c = C.new
c.v = 100
p c.v

上記のコードをとりあえず irb で実行してみる.

irb(main):001:0> class C
irb(main):002:1>   attr_accessor :v # ここを書き換える
irb(main):003:1> end
=> nil
irb(main):004:0> 
irb(main):005:0* c = C.new
=> #<C:0x00558de4a1c260>
irb(main):006:0> c.v = 100
=> 100
irb(main):007:0> p c.v
100
=> 100

以下, 解答.

# 解答 1
attr_reader :v
attr_writer :v

# 解答 2
def v=(other)
  @v = other
end
def v
  @v
end

以下, 解答を irb にて確認.

# 解答 1
irb(main):001:0> class C
irb(main):002:1>   attr_reader :v
irb(main):003:1>   attr_writer :v
irb(main):004:1> end
=> nil
irb(main):005:0> 
irb(main):006:0* c = C.new
=> #<C:0x00557a3df1fad8>
irb(main):007:0> c.v = 100
=> 100
irb(main):008:0> p c.v
100
=> 100

# 解答 2
irb(main):009:0> class C
irb(main):010:1>   def v=(other)
irb(main):011:2>     @v = other
irb(main):012:2>   end
irb(main):013:1>   def v
irb(main):014:2>     @v
irb(main):015:2>   end
irb(main):016:1> end
=> :v
irb(main):017:0> 
irb(main):018:0* c = C.new
=> #<C:0x00557a3dec1618>
irb(main):019:0> c.v = 100
=> 100
irb(main):020:0> p c.v
100
=> 100

以下, ドキュメントより抜粋.

  • Module#attr_accessor
    • インスタンス変数 name に対する, 読み取り及び書き込みメソッドの両方を定義する
    • パラメータは String 又は Symbol で渡す (複数定義が可能)
    • このメソッドで定義されるメソッドは以下の通り
def name
  @name
end
def name=(val)
  @name = val
end
  • Module#attr_reader
    • インスタンス変数 name に対する, 読み取りメソッドを定義する
    • パラメータは String 又は Symbol で渡す (複数定義が可能)
    • このメソッドで定義されるメソッドは以下の通り
def name
  @name
end
  • Module#attr_writer
    • インスタンス変数 name に対する, 書き込みメソッドを定義する
    • パラメータは String 又は Symbol で渡す (複数定義が可能)
    • このメソッドで定義されるメソッドは以下の通り
def name=(val)
  @name = val
end

フムフム.