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

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

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

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

Q&A

解決済

2回答

168閲覧

インスタンスメソッドに引数を渡す

koki0220

総合スコア10

Ruby

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

0グッド

0クリップ

投稿2019/05/24 15:02

前提・実現したいこと

インスタンスメソッドに引数を渡す
ここに質問の内容を詳しく書いてください。

class Dog
attr_accessor :height
attr_accessor :weight

def initialize(height:, weight:)
self.height = height
self.weight = weight

def difference

end

end

dog1 = Dog.new(height: 50, weight: 10)
dog2 = Dog.new(height: 35, weight: 13)

言語名:ruby

この状態から、differenceメソッドを使用し、
dog1の体重がdog2の体重より重いならば、dog1の身長からdog2の体重を引いた値を返り値として返す。
dog2の体重がdog1の体重より重いならば、dog2の身長からdog1の体重を引いた値を返り値として返す。
という計算がしたいです。名前や値は適当につけたので意味はめちゃくちゃですが、インスタンスメソッドの中で、複数のインスタンスの値を引数として与える方法がわからず詰まってしまっています。

質問からわかるとおり超初心者であり、用語もよくわかっていないため拙い説明になってしまい申し訳ありません。
rubyの勉強をした際に
dog1.difference として一つのインスタンスから値をメソッドに渡して計算するやり方はできるのですが、複数となるとどのようにしたらよいのかわかりません。

ご教授お願いいたします。

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

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

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

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

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

guest

回答2

0

どういうふうに呼び出すのが理想かをまず考えます。

ruby

1Dog.difference(dog1, dog2) # 1 2dog1.difference(dog2) # 2 3dog1 - dog2 # 3

まぁ、どれかになるでしょう。

(ところで、身長から体重を引いたものに意味があるのでしょうか?)
ちょっと意味がわからなかったので、適当に絶対差のつもりだったものと補間して
それぞれ

Dog = Struct.new :weigt, :height, keyword_init: true do # 1 def self.difference(dog1, dog2) (dog1.weight - dog2.weight).abs end # 2 def difference(other) (self.weight - other.weight).abs end # 3 def -(other) (self.weight - other.weight).abs end end

こんな感じです。

投稿2019/05/25 00:12

asm

総合スコア15147

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

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

0

ベストアンサー

こんな感じで。

Ruby

1class Dog 2 attr_accessor :height 3 attr_accessor :weight 4 5 def initialize(height:, weight:) 6 @height = height 7 @weight = weight 8 end 9 10 def difference(other) 11 puts "レシーバーの身長は#{@height}、体重は#{@weight}" 12 puts "引数の身長は#{other.height}、体重は#{other.weight}" 13 end 14end 15 16dog1 = Dog.new(height: 50, weight: 10) 17dog2 = Dog.new(height: 35, weight: 13) 18 19dog1.difference(dog2)

投稿2019/05/24 17:00

otn

総合スコア84533

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

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

koki0220

2019/05/25 05:59

otherを使って、思い通りに実行することができました! 丁寧にありがとうございました!どちらの方も同様の回答をしていただいたので、先に回答をしてくださったotn様をベストアンサーに選ばせていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問