質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

1908閲覧

【Ruby】【添字メソッド】構文の流れと機能が理解できません。

s.k

総合スコア423

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/05/15 00:09

こんにちは!
表題の件です。

早速内容ですが、
聞きたいことは

・①p point[0]の流れは
②point = Point.new(3,6)
③def ⇒when 0⇒x=3
④def [] = (index, val)⇒when 0⇒self.x = val⇒val = 3なのか?

・①′p point[1] = 2の流れは
②point = Point.new(3,6)
③def ⇒when 1⇒y=6
④def [] = (index, val)⇒when 1⇒self.y = val⇒val = 6なのか?

・もし違うのであれば正しい流れは何か。
・キーとなるメソッドは何か。

以上、4点を教えていただきたいです。

===========================================

class Point



②def
case index
when 0
x
when 1
y
else
raise ArgumentError, "out of range #{index}"
end
end

③def []=(index, val)
case index
when 0
self.x = val
when 1
self.y = val
else
raise ArgumentError, "out of range`#{index}"
end
end
end

point = Point.new(3,6)
①p point[0] #=>3
①'p point[1] = 2 #=>2
p point[1] #=>2
p point[2] #=>エラー(ArgumentError)

===========================================

よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

省略されている部分が、

Ruby

1def initialize(x,y) 2 @x=x 3 @y=y 4end 5attr_accessor :x, :y

であれば、
・①p point[0]の流れは
②point = Point.new(3,6) @x=3 @y=6
③def ⇒when 0⇒ x→@x→3

・①′p point[1] = 2の流れは
②point = Point.new(3,6) @x=3 @y=6
③def [] = (index, val)⇒when 1⇒self.y = val → 6

です。

投稿2016/05/15 00:36

otn

総合スコア84712

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.k

2016/05/15 02:37

otnさん、ありがとうございます! 構文の流れは理解できました。 加えてもうひとつお聞きしたいのですが、 なぜ ①'p point[1] = 2 p point[1] の表示が2になるのでしょうか?? よろしければ教えていただきたいです!
otn

2016/05/15 02:47

メソッド呼び出しの結果の値は、(returnが無い限り)メソッド定義の中で最後に実行された文の値です。 []= のメソッド定義の中で、最後に実行される文が self.y = val なので、この文の値は val つまり2です。
guest

0

Rubyはあんま使ったことないですけど…

point = Point.new(3,6)

これは(今回の質問では記述が省略されている)コンストラクタなので

②def

③def []=(index, val)

とは関係ないですよね。
関係あるのは以下の四行かと

①p point[0] #=>3 ①'p point[1] = 2 #=>2 p point[1] #=>2 p point[2] #=>エラー(ArgumentError)

投稿2016/05/15 00:22

takasima20

総合スコア7460

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.k

2016/05/15 02:36

takasima20さん、ありがとうございます! 加えてもうひとつお聞きしたいのですが、 なぜ ①'p point[1] = 2 p point[1] の表示が2になるのでしょうか?? よろしければ教えていただきたいです!
takasima20

2016/05/15 02:53

def []=(index, val) の定義は、まさにこの処理を行うためのものです。 そして下の方は下記の定義を使って処理されます。 def [](index) つまり、カギ括弧を使って処理された場合は こういう風に処理しますって定義なんスね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問