【Ruby】【二項演算子】例題で出されたメソッド内の引数の示す意味を知りたいです!
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 1,036
こんにちは!
表題の件です。
二項演算子の例題を解いていました。
一か所躓いてしまったコードがあります。
自分でも調べましたがわかりません。
ぜひ教えていただきたいです。
不明なコードは下にも記しますがピンポイントでいうと
★other.x★が示す意味です。
答えてほしい項目も挙げておきます。
・otherはオブジェクトか?
・otherがオブジェクトでなければ何なのか?
・xはメソッドか?
・xがメソッドでなければ何なのか?
・何か特別なルールがある場合はそのルールの詳細(参考サイトでも全然大丈夫です。)
以上です。
よろしくお願いします。
==============↓例題==================
class Point
attr_reader :x, :y
def initialize(x=0, y=0)
@x, @y = x, y
end
def inspect #表示用
"(#{x}, #{y})"
end
def +(other) #x, yをそれぞれ足す
self.class.new(x + other.x, y + other.y) ←★不明なコード★
end
def -(other)
self.class.new(x - other.x, y - other.y)
end
end
point0 = Point.new(3,6)
point1 = Point.new(1,8)
p point0 #=>(3,6)
p point1 #=>(1,8)
p point0 + point1 #=>(4,14)
p point0 - point1 #=>(2,-2)
================↑例題=======================
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
・otherはオブジェクトか?
オブジェクトです。この場合はPointクラスの他のオブジェクトであることを期待しています。
・otherがオブジェクトでなければ何なのか?
上で述べたとおりです。
・xはメソッドか?
メソッドです。
・xがメソッドでなければ何なのか?
上で述べたとおりです。
・何か特別なルールがある場合はそのルールの詳細(参考サイトでも全然大丈夫です。)
今回のソースのミソは
attr_reader :x, :y
と言う部分です。この部分は実質
def x
return @x
end
def y
return @y
end
と書いた場合と同じになります。attr_reader
は上記のメソッド定義を自動的にしてくれる便利なクラス(及びモジュール)用のメソッドです。他の仲間にattr_writer
とattr_accessor
がいます。
こういう仕組みのため、他のPointのオブジェクトother
に対して、other.xでotherの中の@x、other.yでotherの中の@yに取得できるというわけです。あとは自分の@xと@yと+や-した結果で新たなPointオブジェクトを作るというのが今回のソースの意味になります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
・otherはオブジェクトか?
==> オブジェクトです。
・xはメソッドか?
==> メソッドです。
・何か特別なルールがある場合はそのルールの詳細)
==> attr_reader :x, :y の意味を理解すれば、コード全体が理解できるはずです。
参考情報
- Rubyのattr_accessor, attr_reader, attr_writerとは何か http://www.xmisao.com/2014/02/10/ruby-attr-accessor-attr-reader-attr-writer.html
...
Ruby初心者であれば構文の一種だと誤解してしまいそうだが、これらはインスタンス変数にアクセスするためのメソッドを定義するメソッドである
...
その他の関連情報
attr_accessor は普通にメソッド定義するより速い http://qiita.com/labocho/items/e5c3805f9073f99ca996
再定義できる演算子 で組み込み演算子風のメソッドを定義する http://qiita.com/tbpgr/items/a4390e91c4d6afb7e878
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/14 20:13
raccyさん、ありがとうございます!
なるほどです!
私はアクセスメソッドの定義過程に鍵があることに気付いていなかったので、
この意味を理解できなかったんですね!
非常に困っていたので助かりました。
これからもぜひよろしくお願いします!