No.2ベストアンサー
- 回答日時:
def a(x,y)
print "Hello,",x,y,"!\n"
end
はお分かりですよね。
def []=(x,y)
print "Hello,",x,y,"!\n"
end
も全くそれと同じです。
呼び出し方も、bar.a("wor","ld") とか bar.[]=("wor","ld") と全く同じです。
後者の簡易的な書き方が、bar["wor"] = "ld" ということです。
まあ、本当は話は逆で、ArrayやHashの要素の更新っぽく書く記法をプログラマが自分で自由に定義できる書法を、一般のメソッド定義の延長で書くにはどうしたらいいかという発想で、def []=(x,y) という書法が出来たわけですが。
この回答への補足
bar.[]=("wor","ld") をbar["wor"] = "ld"と書いてもイイって事なんですね。
def [x]=y
print "Hello,",x,y,"!\n"
end
とは書けないので、def [x]=yの代わりにdef []=(x,y)と書くと理解しても良いものでしょうか?
ArrayやHashの要素の更新っぽくって事で、トップレベルに
bar={"wor"=>"ld"}と書きましたが、値が渡らないようでした。
不思議な感じがします。
No.3
- 回答日時:
> ArrayやHashの要素の更新っぽくって事で、トップレベルに
> bar={"wor"=>"ld"}と書きましたが、値が渡らないようでした。
これだと bar はハッシュになりますが、どこに値が渡らないと
悩んでるのでしょうか?
class Foo とは無縁になるのでFooのメソッドは呼ばれません。
>irb
irb(main):001:0> class Foo
irb(main):002:1> def []=(x,y)
irb(main):003:2> print "Hello,",x,y,"!\n"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> bar = Foo.new
=> #<Foo:0xa47b08>
irb(main):007:0> bar["wor"] = "ld"
Hello,world!
=> "ld"
irb(main):008:0> p bar.class
Foo
=> Foo
irb(main):009:0> bar={"wor"=>"ld"}
=> {"wor"=>"ld"}
irb(main):010:0> p bar.class
Hash
=> Hash
irb(main):011:0>
あと
>def [x]=yの代わりにdef []=(x,y)と書くと理解しても良いものでしょうか?
そういうことです。
C++をご存知なら operator[]() みたいなもんです。という説明でわかるかな?
#まつもとさんはC++きらいだけど:)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Makefileのechoの展開について 2 2022/07/26 07:35
- Ruby Ruby / passenger のインストールについて 1 2023/01/30 18:31
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- UNIX・Linux cronでシェルスクリプト実行時のkubactlコマンドが機能しない対処法。 2 2022/08/03 18:58
- Ruby Ruby on Railsでサーバーを立ち上げるには 1 2022/08/28 16:16
- Ruby Rubyについて質問です 1 2022/05/13 18:20
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パイソンのクラス
-
Rubyについて質問です
-
No route matches [GET] "/post...
-
pythonのerrorコード
-
classのdelete
-
What class are you in? には何...
-
HSTLやSSTL等のI/Oピン
-
get() と find() の違いについて
-
エクセルVBA オートフィルタで...
-
「arg」は何の略?
-
メソッド定義の構文のdefって
-
教えてください。vb5.0
-
クエリーストリングとは?
-
RubyでバイナリデータをIOスト...
-
Rubyの超初心者です。「戻り値r...
-
cos波表示について マクローリ...
-
実行時エラー450:引数の数が一...
-
エラー「メソッドまたはデータ...
-
Csvファイルの最終行を取得する...
-
ぱいソン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonのerrorコード
-
What class are you in? には何...
-
パイソンのクラス
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
Rubyについて質問です
-
変数の隠蔽とは?
-
HSTLやSSTL等のI/Oピン
-
クラスの再定義について(C++)
-
redirect先でredirect元の変数...
-
Ruby ハッシュ継承クラス、作成...
-
classのdelete
-
PostScript言語で定積分の計算
-
Rubyの質問です
-
class roomとclassroom どちら...
-
テンプレートの特殊化でコンパ...
-
get() と find() の違いについて
-
「arg」は何の略?
-
エラー「メソッドまたはデータ...
-
教えてください。vb5.0
おすすめ情報