Ruby 初心者スレッド Part 34
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/01/28(木) 08:39:14★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
(理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2010/01/28(木) 08:40:04Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
・「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
・「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245/
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003デフォルトの名無しさん
2010/01/28(木) 08:40:46・Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004デフォルトの名無しさん
2010/01/28(木) 08:43:07・Rubyについて Part 38
http://pc12.2ch.net/test/read.cgi/tech/1257079004/
●アンチスレ
・Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
●Railsスレ
・【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
●Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
●Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
●前スレ
Ruby 初心者スレッド Part 33
http://pc12.2ch.net/test/read.cgi/tech/1259990485/
Ruby 初心者スレッド Part 32
http://pc12.2ch.net/test/read.cgi/tech/1256332692/
Ruby 初心者スレッド Part 31
http://pc12.2ch.net/test/read.cgi/tech/1253176267/
0005デフォルトの名無しさん
2010/01/28(木) 08:46:07・Ruby 1.8.5
レンタルサーバ等にいまだに残ってる非安定な古いバージョン
1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい
・Ruby 1.8.6
過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ
・Ruby 1.8.7
1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい
・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に
・Ruby 1.9.1
満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
0006デフォルトの名無しさん
2010/01/28(木) 09:42:59764 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/28(木) 07:15:32
初心者スレが落ちてるのでこっちで。
関数で呼び出し元のselfを自動で引数として受け取るようにす
ることってできますか。
こんな感じで。
def func(hoge=呼び出し元のself)
p hoge
end
モジュールにしてMix-inさせるとかは無しでお願いします。
0007デフォルトの名無しさん
2010/01/28(木) 09:47:11>>6
呼び出し元で this を渡してやるしかないかなぁ。
0008デフォルトの名無しさん
2010/01/28(木) 09:56:42thisってなんですか?
thisってなんですか?
thisってなんですか?
thisってなんですか?
0009デフォルトの名無しさん
2010/01/28(木) 10:16:250010デフォルトの名無しさん
2010/01/28(木) 10:19:380011デフォルトの名無しさん
2010/01/28(木) 10:33:060012デフォルトの名無しさん
2010/01/28(木) 10:44:50「2010年1月28日 26時30分」
t1 = DateTime.new(2010, 1, 28, 26, 30)
はinvalid dateになります。
今はactive_supportを使って、
「2010年1月28日 26時30分」を
t2 = DateTime.new(2010, 1, 28, 0, 0)
t2 = t2.advance :hours => 26
t2 = t2.advance :minutes => 30
とやっています。これで月末や年末の年月日時の繰り上げもうまく動きます。
問題は逆方法で、
t2.to_s
をするときに、「2010年1月28日 26時30分」の形式にする、
便利なヘルパーメソッドとかはあるのでしょうか?
0013デフォルトの名無しさん
2010/01/28(木) 10:47:19無茶言うな
あったらあったで楽しそうだが
0014デフォルトの名無しさん
2010/01/28(木) 10:49:32(たぶんそれは10時のままにして欲しいと言うはず)
自前で適当だと思う範囲を変換して作るしかないね
0015デフォルトの名無しさん
2010/01/28(木) 11:02:1228時と表現したら怒られた
よくわからん
0016デフォルトの名無しさん
2010/01/28(木) 12:29:14Kernel.private_instance_methods(false)のことですか?わかりません><
0017デフォルトの名無しさん
2010/01/28(木) 14:29:16マスコミ関係の方ですか?
0018デフォルトの名無しさん
2010/01/28(木) 16:25:43という文字列があったとして
ダブルクオーテーションの中以外のカンマにマッチする正規表現ってありませんか?
0019デフォルトの名無しさん
2010/01/28(木) 16:57:000020デフォルトの名無しさん
2010/01/28(木) 17:10:46irb> p str.gsub(/".+?"/){' '}.gsub(/,/){' '}
"first second second third"
こんなんじゃ駄目なんだろうなあ
0021デフォルトの名無しさん
2010/01/28(木) 17:24:03最終的にしたいことは何でしょうか?
ダブルクオーテーションの中以外のカンマの数を数えたいとか、
ダブルクオーテーションの中以外のカンマでsplitしたいとか。
0022デフォルトの名無しさん
2010/01/28(木) 17:30:18str.split(regexp) #=>["first", "second\"a,b,c\"second", "third"]
というのを期待しています。
ダブルクオーテーションはネストしないと仮定しています。
正規表現は難しいです。
0023デフォルトの名無しさん
2010/01/28(木) 17:36:58正規表現スレを見つけました。
正規表現スレに移動した方がよろしいでしょうか?
0024デフォルトの名無しさん
2010/01/28(木) 17:47:26うおめんどくさ
0025デフォルトの名無しさん
2010/01/28(木) 18:08:58str = 'first,second"a,b,c"second,third'
require 'strscan'
COMMA = /\A,\Z/
QUOTE = /".*?"/
SCAN_REG = /#{QUOTE}|./
def parse(str)
result = [""]
scanner = StringScanner.new(str)
while match = scanner.scan(SCAN_REG)
case match
when COMMA; result << ""
else ; result.last << match
end
end
result
end
p parse(str) #=> ["first", "second\"a,b,c\"second", "third"]
0026デフォルトの名無しさん
2010/01/28(木) 18:11:07多分、正規表現だけでは無理なのでここでいいんじゃないかな
0027デフォルトの名無しさん
2010/01/28(木) 18:30:36僕にもっと考える時間と頭をください。
条件を満たすカンマにマッチする正規表現を考えるから難しいのかなー、と思って
違う考え方をしてみた。
str = 'first,second"a,b,c"second,third'
str.scan /(?:[^",]+"[^"]+"[^",]+)+|[^,]+/
=> ["first", "second\"a,b,c\"second", "third"]
あとは、これを頭のいい人が改良するだけでつ(;_;)
002827
2010/01/28(木) 18:47:21個人的には、正規表現は難しいし、魔法じゃないし
言語のチカラを借りて何とかする方が楽かなー、って思う。
んと、C使いだったら一文字ずつ調べてみるけど...
0029デフォルトの名無しさん
2010/01/28(木) 18:49:450030デフォルトの名無しさん
2010/01/28(木) 19:24:17str = 'first,second"a,b,c"second,third'
arr = str.gsub(/".*?"/){|m| m.gsub(/,/, "\0")}.split(/,/).map{|a| a.gsub(/\0/, ',')}
p arr #=> ["first", "second\"a,b,c\"second", "third"]
003118
2010/01/28(木) 19:52:09>>27
カンマ以外の文字列からアプローチする方法は思いつきませんでした。
発送の転換ですね。
一文字づつ調べるというのは>>25氏の方法に近いですね。
>>30
この方法は漏れが少なそうに思います。
>>27氏と>>30氏の方法をベースに検討してみようと思います。
ありがとうございました。
0032デフォルトの名無しさん
2010/01/28(木) 20:03:12こんな感じニカ?
0033デフォルトの名無しさん
2010/01/28(木) 21:18:590034デフォルトの名無しさん
2010/01/28(木) 21:41:50CSV だと思って CSV.parse_line する。だめだって。通らないし。
0035デフォルトの名無しさん
2010/01/28(木) 21:50:19" を含む物から次の " を含むものまでを , で連結したものに置換える。
0036デフォルトの名無しさん
2010/01/28(木) 22:19:46それだと分割したリストを"求めて尋ねる歩く旅に出ないといけなくなるわけだが・・・
0037デフォルトの名無しさん
2010/01/28(木) 22:52:030038デフォルトの名無しさん
2010/01/29(金) 06:11:420039デフォルトの名無しさん
2010/01/29(金) 06:42:16そうだよ。なんならソースをダウンロードして中身をのぞいてみたら?
それを知ってどうするのかは知らんけどさ。
0040デフォルトの名無しさん
2010/01/29(金) 08:35:400041デフォルトの名無しさん
2010/01/29(金) 10:03:32http://pc12.2ch.net/test/read.cgi/tech/1259990485/998
> 998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 09:38:00
> Rubyですごい事が出来た実例を教えて下さい。
Ruby(Rails)で上場しちゃった会社(というと語弊があるがw)
クックパッド(株)【2193】:銘柄情報 - Yahoo!ファイナンス
http://stocks.finance.yahoo.co.jp/stocks/detail/?code=2193
0042デフォルトの名無しさん
2010/01/29(金) 10:59:48> Rubyですごい事が出来た実例を教えて下さい。
昔から使ってる人間としては、Rubyで生計を立ててる人がいる時点で信じられん
0043デフォルトの名無しさん
2010/01/29(金) 11:16:4020年も経てば、あなたがたはRubyに税金をかけるようになるでしょう
0044デフォルトの名無しさん
2010/01/29(金) 11:18:45出遅れた気がするけど、
str = 'first,second"a,b,c"second,third'
str.scan(/(?:^|\G,)([^",]*(?:"[^"\\]*(?:\\.[^"\\]*)*"[^",]*)*)/).map{|a|a[0]}
0045デフォルトの名無しさん
2010/01/29(金) 11:19:48すでに未踏経由で1000万以上税金突っ込ん出るよ、その成果の一つがYARVだ
0046デフォルトの名無しさん
2010/01/29(金) 11:35:56いや電気ほどにはすごくないw
0047デフォルトの名無しさん
2010/01/29(金) 11:56:000048デフォルトの名無しさん
2010/01/29(金) 13:57:490049デフォルトの名無しさん
2010/01/29(金) 14:27:240050デフォルトの名無しさん
2010/01/29(金) 14:31:560051デフォルトの名無しさん
2010/01/29(金) 14:36:07ちょっと変えたいときに悲惨だな
これくらいは読めて欲しい気もするが
0052デフォルトの名無しさん
2010/01/29(金) 15:51:350053デフォルトの名無しさん
2010/01/29(金) 15:53:13初級を脱したと思ってる人は読めて欲しいなー
0054デフォルトの名無しさん
2010/01/29(金) 16:34:070055デフォルトの名無しさん
2010/01/29(金) 16:36:13str.scan(/(?:^|\G,)([^",]*(?:"[^"]*(?:""[^"]*)*"[^",]*)*)/)
005627
2010/01/29(金) 16:45:09なるほど。勉強になったthx
0057デフォルトの名無しさん
2010/01/29(金) 19:46:41正規表現をくれということだから仕方ない
0058デフォルトの名無しさん
2010/01/29(金) 20:15:46自力でMinGW導入して手元でコンパイルするしかないのかな
0059デフォルトの名無しさん
2010/01/29(金) 20:30:14きっと親切なおじさんたちが助けてくれるさ
0060デフォルトの名無しさん
2010/01/29(金) 21:07:20ひとつだけ質問
Net::HTTPSが使うOpenSSLやirbが使うReadlinesとかは放っておいても入る?
んなわけないよね別途用意しなきゃ駄目だよね
0061デフォルトの名無しさん
2010/01/29(金) 21:39:37http://gnuwin32.sourceforge.net/packages/libiconv.htm
http://gnuwin32.sourceforge.net/packages/readline.htm
http://gnuwin32.sourceforge.net/packages/pdcurses.htm
http://gnuwin32.sourceforge.net/packages/zlib.htm
http://gnuwin32.sourceforge.net/packages/gdbm.htm
リンク先を見てわからないなら諦めた方がいいかもしれない。
怖くてリンクを踏めないという見解もありうる。
0062デフォルトの名無しさん
2010/01/29(金) 21:41:31006360
2010/01/29(金) 21:44:46C:/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_origin
al_require': no such file to load -- zlib (LoadError)
うひょう
0064デフォルトの名無しさん
2010/01/29(金) 21:44:570065デフォルトの名無しさん
2010/01/29(金) 21:45:46大文字の方なら
p %W[hoge fuga #{nil} ] #=>["hoge", "fuga", ""]
0066デフォルトの名無しさん
2010/01/29(金) 21:53:29#{nil}はnilになるのかと思ったら""なのね。何で? nil要素は作れない?
0067デフォルトの名無しさん
2010/01/29(金) 21:57:08またレスかぶりそう
0068デフォルトの名無しさん
2010/01/29(金) 22:05:560069デフォルトの名無しさん
2010/01/29(金) 22:11:45irb(main)> "#{nil}"
=> ""
0070デフォルトの名無しさん
2010/01/29(金) 22:25:58いろいろあったんだが、Windowsの場合は自分だけMinGW32にしても意味がない、という結論に至った
配布されてるバイナリのバージョンと揃えておいて、同じようにエラー出したり同じように変な動きしたりするほうがいい
0071デフォルトの名無しさん
2010/01/29(金) 22:30:02Rubyの拡張ライブラリもMinGWでコンパイルしたいんだもん
という人がRubyをMinGWでコンパイルしているんだと思う。
あとメンテナか。
0072デフォルトの名無しさん
2010/01/29(金) 22:36:41「よくわかんないいっぱんゆーざー」がわざわざコンパイルしてまで使用するようなもんでもない
ただしMinGWの知識がある人はどんどん使って色々言ってくれ
0073デフォルトの名無しさん
2010/01/29(金) 23:09:14a = NiseArray.new
p a.class #=> NiseArray
b = a.map{}
p b.class #=> Array
bがワナビーNiseArrayなんだがドゥーしたらいいんだ?
オレにティーチしてくれよ。
0074デフォルトの名無しさん
2010/01/29(金) 23:25:11継承を考慮してないもともとのクラスのデザインのミステイクではある
0075デフォルトの名無しさん
2010/01/29(金) 23:31:20ArrayのメソッドならちゃんとNiseArrayが返すはず
0076デフォルトの名無しさん
2010/01/29(金) 23:36:39っつーかお前のそのクラスはビルトインクラスを継承するだけの動作をするのか、あー? という怖い感じのが一応スタンス
メソッドが欲しいだけなら普通は委譲を使う
0077デフォルトの名無しさん
2010/01/29(金) 23:39:33はい論破
0078デフォルトの名無しさん
2010/01/29(金) 23:41:22継承を使いたくなるくらい遅いというのは実効上の説得力がない
0079デフォルトの名無しさん
2010/01/29(金) 23:41:440080デフォルトの名無しさん
2010/01/29(金) 23:44:04ディスパッチテーブルを
もう一回引く程度のコストが許容できないなら
その問題にRubyは使えないんじゃないかね
008173
2010/01/30(土) 00:17:48ほかはNiseArrayを返す。
あとEnumerableは基本的にArrayを返す。
これらは継承では全滅ということでOKですか?
delegateに馴染みがないので軽いサンプルをいただけると助かります。
もちろん自分でリファレンスマニュアルを読んでみます。
0082デフォルトの名無しさん
2010/01/30(土) 01:32:52自作ライブラリのコード漁ってたらこんなの出てきた
でも、正直これは設計ミスだったと思ってる
%w{ find_all reject select sort sort_by }.each do |method|
class_eval %{
def #{method}
self.class.new(super)
end
}
end
%w{ & * + - grep }.each do |method|
class_eval %{
def #{method}(arg)
self.class.new(super)
end
}
end
008382
2010/01/30(土) 06:10:54継承するとこうなるぞってことで
008473
2010/01/30(土) 10:50:29class NiseArray < Array
instance_methods.each do |method|
define_method(method) do |*args, &block|
result = super(*args, &block)
result.class == Array ? NiseArray.new(result) : result
end
end
end
p NiseArray.new.map{}.class #=> NiseArray
#-----hoge2.rb
require 'delegate'
class NiseArray < DelegateClass(Array)
def initialize
super(Array.new)
end
end
p NiseArray.new.map{}.class #=> Array
#なんでノットNiseArrayなのかミーにはホワイなんです><
0085デフォルトの名無しさん
2010/01/30(土) 14:01:51def initialize(a=Array.new); @a=a; end
def method_missing(*arg, &block); A.new(@a.__send__(*arg, &block)); end
def to_a; @a; end
def to_ary; @a; end
end
irb> a = A.new([1, 2, 3, 4, 5])
irb> a.delete(5)
irb> p a
#<A:0xb7cf21c0 @a=[1, 2, 3, 4]>
irb> p a.map{|e| e*2}
#<A:0xb7cecb30 @a=[2, 4, 6, 8]>
irb> p a.class
A
irb> p a.to_a
[1, 2, 3, 4]
irb> p Hash[*a]
{1=>2, 3=>4}
008673
2010/01/30(土) 14:46:42鮮やかに委譲してますね。
しかも直感的でわかりやすい。
#all?など返り値が委譲先のオブジェクトでないメソッドも少し手直しすれば動きそうです。
勉強になりました。参考にさせてもらいます。
0087デフォルトの名無しさん
2010/01/30(土) 17:55:24'あ' =~ /\xe3/ #=> 0
'あ' =~ /[\xe3]/ #=> nil
となります。
$KCODEを指定しないとどちらも同じ挙動になるんですが。
これは意図した動作なんでしょうか。
手元の環境は
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
です。
0088デフォルトの名無しさん
2010/01/30(土) 18:58:31$KCODE を設定しないということは
'あ' はただのバイト列として 0xe3 と比較される。
0089デフォルトの名無しさん
2010/01/30(土) 19:11:040090デフォルトの名無しさん
2010/01/30(土) 22:20:20p Class === Class #=> true
p Module === Module #=> true
p Object === Object #=> true
p String === String #=> false
p Array === Array #=> false
p BasicObject.class #=> Class
p Array.class #=> Class
p Kernel === Kernel #=> true
p Enumerable === Enumerable #=>false
p Kernel.class #=> Module
p Enumerable.class #=> Module
なんで?教えてえらい人!
0091デフォルトの名無しさん
2010/01/30(土) 22:52:30Module#===の定義をリファレンスで読むといいよ
selfがモジュールとすると「obj.kind_of?(self) が true の場合、 true を返します」だとさ
0092デフォルトの名無しさん
2010/01/30(土) 23:00:030093デフォルトの名無しさん
2010/01/30(土) 23:21:41===
0094デフォルトの名無しさん
2010/01/30(土) 23:22:47=== が再定義されているから
case value
when Integer
when String
end
みたいに書けるんじゃないか
0095デフォルトの名無しさん
2010/01/31(日) 00:08:030096デフォルトの名無しさん
2010/01/31(日) 07:39:30代入文みたいに a ||= {} 使うみたいな
辞書の割り当てとかでしょうか?
0097デフォルトの名無しさん
2010/01/31(日) 07:55:53objの中身はライブラリから返されたもので詳細はわかりません
p obj.class #=> Hash
p obj.is_a? Singleton #=> false
Marshal.dump(obj) #=> TypeError: singleton can't be dumped
以下はエラーになりませんでした
obj.each {|k,v| Marshal.dump([k,v])} #=>エラーなし
0098デフォルトの名無しさん
2010/01/31(日) 08:13:23そのエラー分かりにくいよね
特異メソッド(およびそれが定義されているオブジェクト)はダンプできませんよって意味
dupしたものをダンプするようにするか、自分で言ってるように中身だけ出すのが正解
0099デフォルトの名無しさん
2010/01/31(日) 08:40:37これ書いてる解説少ないんだよな
a がNameErrorを返すか、変数 a が存在して偽を返す場合、 a = {} を実行する
という程度の意味
実際のスクリプトでは大量に使われているが、初心者用文法解説ではほとんど言及されていない謎の記述
0100デフォルトの名無しさん
2010/01/31(日) 09:18:07a += 1
a = a + 1
a ||= {}
a = a || {}
a が偽と評価される場合に限り a = {} となり、それ以外のときは a = a
変数の初期化を保証するために使われることが多い
0101デフォルトの名無しさん
2010/01/31(日) 09:23:09だいたいの意味はそうだからいいんだけど、厳密には
a || (a = b)
ってことになる
||= と &&= だけちょっと特殊
ってようなのをどっかで見た
■ このスレッドは過去ログ倉庫に格納されています