1 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:31:07 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ 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つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
620 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:56:18 ] ruby/dbiの公式に行きまして、classデータベースというページがあり メソッドの説明がしてありました。しかし、記述が少ししかなく。 こういう場合、ソースを読むんでしょうか? とりあえず、今は目的に必要なことだけをやっていこうと思います。
621 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:06:32 ] >>597 >rows = dbh.do("INSERT INTO people (name,height) >VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)") >printf "%d rows were inserted¥n", rows > >ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると >4 rows were insertedと表示されます。 > >printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが >どういう動きをしているんでしょうか? 1行目の rows = dbh.do("insert....") で、insertした件数が返されて rows に代入されているだけじゃないかな。 それを printf "%d ", rows で出力している。そんだけ。
622 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:29:41 ] >>620 ググったら公式じゃないけどこんなページがあったよ ttp://www.nslabs.jp/book2-dbi.rhtml
623 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:31:28 ] >>618 選択肢がないという話では
624 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:35:37 ] >>623 >>602-603 がそうはとても見えない
625 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:38:34 ] >>624 sprintf 使ったことある?
626 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:45:18 ] >>625 sprintf系まとめて異端だったの? >>603 は「(sprintfはまだしも)String#%は使うな」と言ってるんだと思ってたけど
627 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:51:44 ] C に由来する sprintf や pack/unpack の書式記号や利用法が Ruby らしくないというツッコミなんじゃ…
628 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:57:52 ] pack系はともかくsprint系に選択肢ないか?
629 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:02:21 ] >>603 はどう考えてもネタです
630 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:04:49 ] pack は map で直接書くというコードの動作的にはある意味わかりやすい代替手段が
631 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:27:58 ] しかしprintfを非難するとはいい度胸だ…これも平成ゆとりが増えたからなのか…
632 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:33:55 ] packにせよprintfにせよ、DSLは不思議と好き嫌いが分かれる気がする
633 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:34:36 ] >>631 「わかりにくい」ことは確か 初心忘れると老害と罵られるぞ
634 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:37:58 ] 反printf派に聞きたいんだけど 今より使いやすい(Rubyっぽい)printf構文ってどんなの?
635 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:39:17 ] とりあえず「詳しくはmanページ読んでね」というのは頂けないな 「正規表現はPerlと同じ物が多いので同じ場合はそちらを」は通用しないのに
636 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:14 ] >>633 packは使ったこともないし使う場面もないから構文すら知らない。 rubyでdef endしちゃうから今後も使うことはないだろう。
637 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:50 ] $と記号1つのグローバル変数(今となっては排除したいらしいが)も、 「Perlといっしょ」で通じなくなってきてるからな…
638 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:42:04 ] printfを知らないとなると、rubyしか触ったことないってことになるんだがな… webクリエータはたいてい適当だしそんなもんかw
639 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:00 ] >>636 バイナリファイルのヘッダパースとかどうやってやってるの?
640 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:31 ] >>636 irb1.8> p "ルビー" "\343\203\253\343\203\223\343\203\274" これ日本語に戻してー
641 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:44:32 ] >>638 お前puts使わないだろ
642 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:47:39 ] >>636 1.8でUnicodeEscapeSequence文字列が欲しいです先生
643 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:49:20 ] >>640 evalしろ
644 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:50:35 ] packはまあ・・・・使う時にリファレンスを見てやるしかないな 一方、青木氏はpackで壊れた >まったくpackの意味不明さときたら、 >「packのテンプレートがわからなくたって悔しくなんかないんだからな! バーカバーカ!」 >と幼児退行してみたくなるほどです。
645 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:52:37 ] >>643 こういう文字列をevalしろとな
646 名前:デフォルトの名無しさん [2009/10/07(水) 22:09:18 ] 青木氏って2chねら?
647 名前:デフォルトの名無しさん [2009/10/07(水) 22:27:52 ] ttp://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv このファイルが開けないのですが、どーすれば良いのでしょうか。
648 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:31:52 ] >>647 中身がタブ区切りのtsvだからです っていうかファイルの中身確認することくらいしようぜ
649 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:34:21 ] putsすると日本語でも表示されるよね sjis問題で文字化けはするけど
650 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:44:34 ] gets, puts ってのはもろにCだと思うんだが・・・
651 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:55:35 ] え・・・そうだと思うけどなんか違った・・?
652 名前:デフォルトの名無しさん [2009/10/07(水) 23:28:42 ] visualstudioみたいにボタンとかを貼り付けて入力フォームが作りたいんですが ああいうツールは無いんでしょうか?
653 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:32:42 ] CentOS上でruby1.8.7から1.9にアップデートしたいのですが、 Linuxの知識に乏しいためなかなか手が付けられません。 1.8.7のインストールはネットで調べつつなんとかソースコードから入れました。 一般的にはどのような手段でアップデートするのでしょうか?
654 名前:デフォルトの名無しさん [2009/10/07(水) 23:34:49 ] >>653 このスレ的には Debian にしろって言われると思うが。
655 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:34:51 ] > Linuxの知識に乏しいためなかなか手が付けられません。 じゃあ無理だ 諦めろ あとスレ違い
656 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:39:29 ] こういう奴は何しにこのスレに張り付いてるんだろうか
657 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:41:38 ] >>656 わりと適切だと思うが… Linux使ったことあるか?
658 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:43:45 ] make がなにやってるか理解しないといかんからなー それはこのスレの範囲を超える パッケージがないなら諦めれ
659 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:01 ] 貼りついてるw
660 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:15 ] もろスレ違いだと思うが。
661 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:52 ] Ruby公式ページにインストールガイドってリンクあるからみればいいよ
662 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:48:54 ] 教祖も使っているDebian最強 aptitude install ruby
663 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:49:18 ] Linux上で、しかもLinuxに関する知識がないのなら パッケージ管理システム(aptやyum)を使え、としか
664 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:54:26 ] >>662 1.9.1は存在しない(Sid除く)
665 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:58:14 ] この場合Linuxの知識は無関係だろ
666 名前:デフォルトの名無しさん [2009/10/08(木) 00:38:00 ] >>653 package application で source または archive の site を追加… 大抵は package gpg key は初期の物が使える筈… source package で compile install が出来るので在れば source を拾って来て install.
667 名前:デフォルトの名無しさん [2009/10/08(木) 00:50:15 ] ruby は python を使えれば 使う事ができますか python と ruby の関数で違う物は在るのでしょうか?
668 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:54:47 ] フィッシングタイムですか?
669 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:58:16 ] 邪魔しないでください >>668
670 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:05:11 ] >>667 全体的に大阪弁と東北弁ぐらいの違い
671 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:09:16 ] >>667 片方が使えるなら、もう片方もさほど苦労しない
672 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:53:24 ] gems.rubyforge.orgにgemでアクセスできなくない?
673 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:57:30 ] rubyが司る世界において 数字の1が生まれたら、それは数字クラスに所属していて 数字クラスのメソッドにない動きは出来ないってことですか?
674 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:10:39 ] Rubyには、オブジェクト(インスタンス)ごとにメソッドを定義できる、 特異メソッドという仕組みがあるので、たいていのクラスでは、イン スタンスごとに振る舞いを変えることができる。 しかしながら、数(Numericおよびサブクラス)にはこれが定義できない ように制限されている。 なお、数インスタンスが生まれた後に、数クラス自体にインスタンスメ ソッドを追加した場合、既存の数インスタンスでも使える。
675 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:21:33 ] irb> module One; def one; "one!"; end; end irb> 1.extend(One) TypeError: can't define singleton from (irb):2:in `extend_object' from (irb):2:in `extend' from (irb):2 from :0 irb> "1".extend(One).one "one!" ああ、わかりやすいエラーだ
676 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:26:28 ] >>673 一般的にはそう クラスに定義された動作(メソッド)のみが可能 ただし Ruby はオープンクラスだから、自分でクラスを拡張してメソッドを追加変更することができる ある人の String クラスにあるメソッドが、 別の人の String クラスにもあるとは限らない ある人の作った String のインスタンスが、別の人の作った String のインスタンスと全く同じ動作をする保証はない ただ、組み込みクラスのメソッドやライブラリ標準メソッドの上書きは自己責任なので気にしなくてよい それと整数クラスは>>674 の言うように例示にはちょっと不適
677 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:34:07 ] >>675 数字と数の違いか:-p
678 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:22:07 ] M1::C1::C2 というネストしたクラスがあります あるオブジェクトが M1 を「ネスト構造上含んで」いるかどうかを調べたいです 文字列として正規表現で比較するしかありませんか? obj.class.to_s =~ /\AM1::/
679 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:56:18 ] >>678 どんな場合にも動作するのは文字列としての比較 Module.nesting が使えることも多いが、特定条件で存在できないモジュールオブジェクトを指定できない
680 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:02 ] C → Java → Ruby と勉強してきましたが、次の言語は何がいいと思いますか? プログラミングは単なる趣味です。
681 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:52 ] Haskell
682 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 12:08:49 ] Lisp系列が足りないな
683 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:20:33 ] >>680 趣味というなら、マイナー言語でもいいよね。 Rubyとは真逆の、静的な関数言語がいいんじゃないかな。 OCamlかHaskellあたり。どちらも日本語での入門書があるし。
684 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:10:41 ] railsで、webアプリを作るのに 必要な知識ってなんですか? ruby rails 正規表現 html,xhtml,xml javascript mysqlなどRDMS apacheなどhttpサーバー こんなもんでしょうか?
685 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:04 ] >>684 他の言語でフレームワークべったりでないWebアプリケーションを作ることができれば問題なし なんじゃそりゃって感じだけど、まず間違いない あとRailsは板違いなので 【Ruby】Ruby on Rails Part8 pc11.2ch.net/test/read.cgi/php/1252842574/ こっち池
686 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:17 ] >>681-683 サンクス。 OCamlかHaskellあたりがお薦めなんですね。 了解しました。
687 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:20:43 ] >>685 どもっす。半年間精進してダメなら諦めます。
688 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:40:15 ] rspec 版の testrb コマンドってありませんか?
689 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:48:15 ] >>688 spec -fs -c spec/
690 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:54:54 ] >>689 1578 examples, 0 failures っひょー
691 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:28:14 ] >>690 おまえすごいな
692 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:32:09 ] 個人でもちょっと規模大きければこんなもんだろ
693 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:31:04 ] 俺レベルになるとワンライナーで大企業の基幹システムを作れるようになる
694 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:45:04 ] rspec 使ってるとテストはやたら増える
695 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:08:57 ] 無印のサイトはシェルやワンライナーで作ってる、なんて言ってたけど、 どーりで重いわけだと思ったよ
696 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:44:18 ] 初心者らしい話題 class CArray < Array end a = CArray.new b = CArray.new c = a + b p c.class #=> Array CArrayを返してほしい。 class CString < String end a = CString.new("aaa") b = CString.new("bbb") c = a + b p c.class #=> String CStringを返してほしい。
697 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:17:14 ] CArray というクラス名に吐いた class CArray < Array def +(v); self.class.new(super(v)); end end
698 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:58:05 ] a[0..1]みたいなのはちゃんと元のクラスにやってくれるんだよね
699 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:22:00 ] Array や String の(Cで記述した) + メソッドの定義の中で Array.new や String.new がハードコーディングされてるんだろうな 何らかのシステム的理由があるか、いまさら変更できないか、どっちかだろう まあ、バグっちゃバグかもしれん
700 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:13:02 ] >>698 むしろそっちのほうの挙動が不思議 Stringクラスの実装はCStringを知らないはずなのに、 どうしてCStringオブジェクトを返せるんだ?
701 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:28:37 ] インスタンスがあればクラスわかるから返せるにきまっとるわい
702 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:03:22 ] superのnew呼び出しでself.class.newってやるのきもくね?
703 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:10:19 ] 継承を前提としたクラスならってところ 組み込みでいえばIOとかNumericあたり というか、otherと絡むときにわざと基本クラス返してる気がするなぁ
704 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:07:56 ] レヴェルの低いインターネッツだな
705 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:22:09 ] 組み込みのくみこちゃんをdisるのはやめろ
706 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:06:39 ] >>703 あらゆるクラスは継承で動作可能「でなければならない」 継承したとたん動作しなくなるライブラリはプギャー
707 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:26:07 ] それぞれArrayを継承したFooとBarがあったとして foo + bar がどのクラスを返すべきかとか考えると >>703 の言うようにわざと基本クラスを返すのはありなんじゃないかと思う
708 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:31:28 ] >>707 > foo + bar がどのクラスを返すべきか 変換っぽいメソッドでない限り、通常はレシーバのクラスを返すべき つまり、foo のクラスを返すべき
709 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:54:09 ] このパッチをあててリビルドすればOK --- a/array.c +++ b/array.c @@ -2657,12 +2657,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary) VALUE rb_ary_plus(VALUE x, VALUE y) { + VALUE klass; VALUE z; long len; y = to_ary(y); len = RARRAY_LEN(x) + RARRAY_LEN(y); - z = rb_ary_new2(len); + klass = rb_obj_class(x); + z = ary_new(klass, len); MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));
710 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:07:52 ] 本当にそのほうがいいと思うなら、 redmine.ruby-lang.orgにfeature request投げとけば。 個人的には、両方のクラスが同じときだけにすべきじゃないかと思うが。 あと2chに初出のコードは著作権的に取り込むのは危険なんじゃなかったっけ。
711 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:22:54 ] >>710 危険というか取り込み不可能 というか別にそんなことを意図したコードでもあるまい お前空気読めないと周りから言われるか全く何も言われないかどっちかだろ
712 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:50:19 ] 無理矢理ねじ込んだ感バリバリの3行目に ドカタのストレスを見た。
713 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:56:26 ] 言われるか言われないかのどっちかワロタ
714 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:27:56 ] 質問です;; mvcモデルをつくりたいのですが、下記エラーが出て削除機能が使えません undefined method `destroy' destroyが使えない?? newもfindも使えるのに・・ 解決法知ってる方いたら教えてください
715 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:40:02 ] MVCと直接関係ない質問に見えるけど何の話?
716 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:45:48 ] 要するにdestroyメソッドを使う方法がわからないです
717 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:47:12 ] destroyメソッドってなに?
718 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:49:12 ] すいませんここはrailsは対象外なんですかね・・ 他当たってみます
719 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:51:30 ] >>718 RailsならRailsと言え。 MVCってのはRails固有の概念ではない。 あと、 【Ruby】Ruby on Rails Part8 pc11.2ch.net/test/read.cgi/php/1252842574/
720 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:33:54 ] undefined method `destroy'の後が重要だったりするんだよな
721 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 17:12:32 ] >>720 この場合はいいえ
722 名前:714 mailto:sage [2009/10/11(日) 01:00:33 ] >>721 何か知ってる事あったら教えてもらえますか?
723 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:07:07 ] うざ
724 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:59:17 ] PStore.dump してファイルに保存済みのデータがあったとし a = nil PStore.new(...).transaction do |c| a = c[:data] # Array や Hash がネストしたデータ(shallow copy では完全にコピーできない) end x = a[...][...].XXX[...] というように PStore.transaction の外で読み込んだデータ を使っても問題ないものなのでしょうか。 内部的には Marshal.load しているということなので、問題 ないような気もするのですが、ドキュメントの記述を見ると そういう使い方していないようなかんじなので…。
725 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:02:25 ] Marshal.dump は唯一、標準ライブラリで深いコピーを行う
726 名前:724 [2009/10/11(日) 12:16:24 ] なるほど >>725 さん PStore が Marshal 上に実装されているという前提が変わらない限りは PStore#transaction の外にデータを持ち出しても問題ないわけですか これまで無駄に transaction の内部にコード入れていたので書き直そう…。
727 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:20:45 ] >>724 PStore#transactionは、 * 同じデータファイルに対する他のPStoreアクセスを禁止している (読んでる間に書き換えられないように) * ブロック処理がabortされなければ、変更の再ダンプを行う。 という感じの仕事をしている。 中で読んだデータはそのままメモリにある。ブロックを出たあと、 誰かがデータファイルを書き換えたとき、それとメモリが一致しな いということを認識した上でなら問題ない。
728 名前:724 mailto:sage [2009/10/11(日) 12:43:24 ] まさにそのあたりが気になっていた(transaction 抜けたら参照している データがメモリ上から消えちゃう可能性があるのかなあ、とか)のです、 明快な説明どうもありがとうございました >>727 さん
729 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:19:20 ] きちんとトランザクションって書いてあるだろ トランザクション抜けたからって取得データ本体が消えるなんてことはそもそも …実装としてありそうな気もするな トランザクション有効中に明示的に複製してクダサーイというのはアリではある んで、PStore#transaction は普通は File.open のようにブロック範囲を限定して使う データを取得または保存する瞬間にだけ、トランザクションに入る 何らかの理由で複数回アクセスしたいという場合は、PStore.new のオブジェクト自身を変数で保持する なお、 PStore は、実装の都合上「ファイル全体を最初から最後まで必ず読み込む」ので注意 変更部分に対応したファイルの一部分だけを書き換えるとか、そういう細やかな小細工は通用しない データの大きさと更新頻度によっては複数に分けたほうが負荷的にお得
730 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:36:09 ] WinでAutoHotKeyの代わりに使える機能を完備してあるライブラリってない?
731 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 16:56:05 ] 繰り返し処理で正規表現を使う場合 a.each do |b| print "match" if c =~ /hoge/ end よりも reg = Regexp.new("/hoge") a.each do |b| print "match" if c =~ reg end の方がいいでしょうか?
732 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:05:15 ] そういうのは正規表現の中に変数を含む場合です
733 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:12:35 ] 変数を #{} などで含まない「固定」の正規表現は1回しか生成されない 1.upto(10000).each do /h/ =~ "hoge" end でも re = /h/ 1.upto(10000).each do re =~ "hoge" end でも、Regexp のインスタンス生成は1回だけ つまり、処理速度や負荷的には実質どちらでも構わないし、 厳密にはブロックの外の変数を参照するコストのぶんだけ後者が遅い
734 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:34:33 ] >>732-733 なるほど、ありがとうございます
735 名前:724 mailto:sage [2009/10/11(日) 22:15:19 ] RDBを使うほどでもないけどちょっと中間データをファイルとして永続化して おきたい(けどCSVファイルなんかは表現力が弱いので嫌な)ときに、素で Marshal.dump/load するより楽なので PStore を使っていたのですが PStore#transaction でデータ処理全体をブロックする必要があるのかないの か「実装としてありそうな気もする」ので気になっていたので、たいへん勉強 になりました、どうもありがとうございます >>729 さん
736 名前:デフォルトの名無しさん [2009/10/12(月) 19:03:31 ] rand()の範囲を指定したいのですが 10から20の間の数をランダムに発生させたいというばあい rand(10-20)とか直接与えることは出来ますか?
737 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:13:37 ] 0から10の範囲の乱数を発生させて10を加える。
738 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:18:20 ] >>737 が正解
739 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:21:25 ] 俺俺ライブラリに class Range def rand Kernel.rand(last-first+1)+first end end ってやっといて (10..20).rand するとか 標準じゃ無理
740 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:29:25 ] (10..20).to_a.sort_by{rand}.first
741 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:39:58 ] >>740 短いのですがどうもちゃんと動作しないようです。 (1..2**30).to_a.sort_by{rand}.first としましたが、結果がかえってこないのであきらめました。
742 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:07:39 ] >>741 そりゃ単に重すぎるだけだ 要素数が2**30の配列を作ってるんだから そこまで大きな数を扱うのなら、小手先なしでrandした方がいいよ
743 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:08:59 ] だから>>737 以外は実用妥当な乱数にならねえって
744 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:09:56 ] スレタイ100回読んで半年ROMっとけ
745 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:15:49 ] 乱数発生部は組み込みに任すのが完全に正しい姿だな 累乗とか使って結果的に偏らせるのも成長段階には必要という説もあるが
746 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:17:49 ] 最近/.並にゴミで埋まるようになってきたなここ。
747 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:23:23 ] >>746 2chも大差ないだろ
748 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:24:39 ] >>746 斬新な自己紹介ですね
749 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:40:35 ] こういうありきたりなループの終了条件に !=を使うのは普通ですか? count = 1 end_count = 10 while count != end_count puts count count = count + 1 end
750 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:44:09 ] へん
751 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:48:03 ] (1...10).each {|i| puts i} じゃだめなん?
752 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:50:22 ] count が増えるとは限らないのだろ loop do break if count == end_count ... end せめて break して欲しい
753 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:08:18 ] >>752 何でbreakの方を推すの? 横から見てもいまいちわからん 普通ここは、読みやすいuntilを推す流れじゃないかと思うんだけど
754 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:15:49 ] あまり使わないんですね。 気をつけます。ありがとうございます。
755 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:18:26 ] あまり使わないのか? 場合によりけりで特に使う使わないを気にする記述でもないと思うんだけど
756 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:21:14 ] >>740 単に非効率なやり方だろ 他人に教えるようなものじゃない
757 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:29:55 ] C++のSTLのイテレータに慣れてるとそう書きたくなるな。
758 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:33:38 ] 読みやすい until などというものは存在しない と思う