二項演算子の定義
rubyを学び始めた超初心者です。プログラム経験はありません。
参考プログラム、下記を入力しましたが2箇所?納得ができません
笑われるような質問なのかどこを探しても解決できません。
よろしくご教授願います。
12行,16行 Vec.new(@x + other.x, @y + other.y)
other., other.yの表記の意味が理解できません。
class定義が終了していないのに使用している
1class Vec
2attr_reader :x, :y
3def initialize(x=0, y=0)
4@x, @y = x, y
5end
6
7def inspect #表示用
8"(#{@x}, #{@y})"
9end
10
11def +(other)
12Vec.new(@x + other.x, @y + other.y) # x, y のそれぞれを足す
13end
14
15def -(other)
16Vec.new(@x - other.x, @y - other.y) # x, y のそれぞれを引く
17end
18end
19
20vec0 = Vec.new(3, 6)
21vec1 = Vec.new(1, 8)
22
23p vec0
24p vec1
25p vec0 + vec1
No.1ベストアンサー
- 回答日時:
はーい。
Rubyを学び始めたいと思っている者です。一応雑誌の記事を読んだ事ある程度の知識と
一応プログラマしてた知識をを総動員したフリして
解説っぽく回答します。
なので、回答内容が正しいかどうかもあわせての検証をお願いします。
各行の頭についている数字は行番号という認識で進めていきます。
では始まり始まり。
1:クラスVecの宣言。
2:Vec用変数xとyの宣言。
3:いきなり使われるとx、yの中身は不定なので初期化(?)。
4:…何だろう?初期化の実体?
5:初期化の終端。
6:
7:表示処理の…関数みたいなもの?
8:表示処理の実体?
9:表示の終端。
10:
11:足し算する時はこうよ。宣言
12:足し算処理はこうするのね。
13:足し算終端。
14:
15:引き算する時はこうよ。宣言
16:引き算処理はこうするのね。
17:引き算終端。
18:---クラスVecの終端?
19:
20:vec0として、xに3、yに6をセットします。
21:vec1として、xに1、yに8をセットします。
22:
23:vec0の内容を表示? (3,6)
24:vex1の内容を表示? (1,8)
25:vec0とvec1を足して表示? (4,14)
こんな感じでしょうか。
では質問文に対しての回答。
@が付いているのは12行目の場合、"+"の左側にきたもののデータ。
25行目でいうvec0に格納(?)されているxが3でyは6。
に対して、other.xとother.yは"+"の右側にきたもののデータのxとy。
25行目でのvec1の部分に相当。
つまり、25行目では「vex0とvex1のx同士、y同士を足しますよ」
と言っているものと思われます。
頭にpが付いているので表示処理も合わせて行うと推測しました。
さて、現実はいかに?
No.2
- 回答日時:
> 12行,16行 Vec.new(@x + other.x, @y + other.y)
> other., other.yの表記の意味が理解できません。
> class定義が終了していないのに使用している
そもそも、Rubyの場合、ここでのotherがclass Vecであるとは限りません。
x,yというメソッドなり属性なりを持っていて、それぞれが@x,@yと演算できるオブジェクトを返すのだったら、なんでもいいはずです。
C++やJava等のような、宣言が必要な言語と混同していませんか?
もっとも、そういった言語でも「クラスの定義が終了していない」状態でも、宣言さえあれば使用できますが。
// C++の例:
class Vec{ //定義開始
public:
double x;
double y;
// 「定義」の途中だけどVecクラスを使っている
Vec& operator+=(const Vec& other){
this->x += other.x ;
this->y += other.y ;
return *this ;
}
}; // Vecの定義終了
回答ありがとうございます。
やはり60過ぎてプログラムの勉強は難しいですね。
>C++やJava等のような、宣言が必要な言語と混同していませんか?
他のプログラム言語はよく知りません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- 英語 another dogやother companiesというように不特定を表すanotherや ot 3 2023/08/21 19:54
- 英語 和訳の手伝いをお願いします 2 2023/02/27 11:42
- 哲学 Humility is ... appearance.の一番古い出典となる書物は何で著者は誰ですか? 11 2022/04/21 03:19
- 英語 否定語が多く意味が取れません 4 2022/11/27 20:28
- 英語 came... on to the ... road の on の意味合いは? 5 2022/11/07 18:17
- 英語 If you reach for food to relive stress or to remov 2 2022/05/15 13:55
- 英語 "another" を "an other" の違い 3 2022/05/12 10:51
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/04 14:20
- 英語 This bridge is longer than any other built in the 3 2023/01/14 05:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
前回の質問の続き
-
教えてください
-
100万件越えCSVから条件を満た...
-
あせんうぶり言語
-
英数字を含む文字列(0-9,A-Z)...
-
パソコンのスクリーンセーバー...
-
ターミナルからemacsへのコピペ...
-
WSLのUbuntuで、Railsのインス...
-
再起動後必ず2つのエラーが出...
-
ビーリアルのユーザー名を変え...
-
文字コードのエラー
-
パイソンエラーについて
-
pythonエラー
-
1、Rstudioで回帰直線を求める...
-
PysimpleGUIでデータベースを作る
-
Ruby on railsをrails sで立ち...
-
回復ドライブとインストールメ...
-
これらは書誌情報だと思うので...
-
じゃんけんのプログラムを作っ...
-
C言語の入力した文字を反転させ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テンプレートの特殊化でコンパ...
-
What class are you in? には何...
-
変数の隠蔽とは?
-
class roomとclassroom どちら...
-
構造体を使ったプログラム
-
HSTLやSSTL等のI/Oピン
-
クラス名やモジュール名の競合...
-
プログラミングRubyについての...
-
インスタンス内から自分のクラ...
-
演算子の再定義とインスタンス...
-
c言語のプログラムでこの実行結...
-
[LWP?] 特定のCLASSの値だけ取...
-
Ruby ハッシュ継承クラス、作成...
-
2つのクラスがお互いのポイン...
-
pythonのerrorコード
-
classのdelete
-
二項演算子の定義
-
railsのform_forの使い方
-
No route matches [GET] "/post...
-
下線部の答え教えてください こ...
おすすめ情報