1 名前:1様 [2009/04/02(木) 09:42:23 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】 【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】 ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ 関連スレや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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
577 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 12:49:38 ] >>576 File::Stat に見当たらないということはサポートされてないのかなあ 自分には Win32API の GetFileAttribute/SetFileAttribute を呼ぶくらいしか思いつかない
578 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 13:25:25 ] 標準では無いよ gemのWindowsファイルシステム操作ライブラリで見た覚えがあるので適当なの使え
579 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 14:43:45 ] win32-fileにあったと思う
580 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 16:05:39 ] opensslライブラリのマニュアルを読んでいるんですけど www.ruby-lang.org/ja/man/html/OpenSSL_Cipher_Cipher.html pkcs5_keyivgen('str') で生成したキーを取り出すことってできないんでしょうか。
581 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 17:29:42 ] rubyscript2exeが動かなくなってしまいました。非常に困っています。 何か解決策はありませんでしょうか? > rubyscript2exe test.rb Tracing test ... Gathering files... c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb:60:in `gatherlibs': undefined method `list' for Gem::Specification:Class (NoMethodError) from c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb:30 from test.rb:1 hellow Couldn't execute this command (rc=256): d:\software\ruby\bin\ruby -r 'enumerator.so' -r 'rubygems/rubygems_version.rb' -r 'rubygems/defaults.rb' -r 'thread.so' -r 'thread.rb' -r 'etc.so' -r 'rbconfig.rb' -r 'rubygems/exceptions.rb' -r 'rubygems/requirement.rb' -r 'rubygems/version.rb' -r 'rubygems/dependency.rb' -r 'rubygems/gem_path_searcher.rb' -r 'rubygems/user_interaction.rb' -r 'rubygems/platform.rb' -r 'rubygems/specification.rb' -r 'rubygems/source_index.rb' -r 'rubygems/builder.rb' -r 'stringio.so' -r 'yaml/error.rb' -r 'syck.so' -r 'yaml/ypath.rb' -r 'yaml/basenode.rb' -r 'yaml/syck.rb' -r 'yaml/tag.rb' -r 'yaml/stream.rb' -r 'yaml/constants.rb' -r 'rational.rb' -r 'date/format.rb' -r 'date.rb' -r 'yaml/rubytypes.rb' -r 'yaml/types.rb' -r 'yaml.rb' -r 'Win32API.so' -r 'rubygems/config_file.rb' -r 'rubygems/custom_require.rb' -r 'fileutils.rb' -r 'rubygems.rb' -r 'ubygems.rb' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1' -I 'd:/software/ruby/lib/ruby/gems/1.8/gems/rubyscript2exe-0.5.3/bin' -I 'd:/software/ruby/lib/ruby/gems/1.8/gems/rubyscript2exe-0.5.3/lib'
582 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 17:30:30 ] -I 'd:/software/ruby/lib/ruby/site_ruby/1.8' -I 'd:/software/ruby/lib/ruby/site_ruby/1.8/i386-msvcrt' -I 'd:/software/ruby/lib/ruby/site_ruby' -I 'd:/software/ruby/lib/ruby/vendor_ruby/1.8' -I 'd:/software/ruby/lib/ruby/vendor_ruby/1.8/i386-msvcrt' -I 'd:/software/ruby/lib/ruby/vendor_ruby' -I 'd:/software/ruby/lib/ruby/1.8' -I 'd:/software/ruby/lib/ruby/1.8/i386-mswin32' -I '.' -I 'd:/home/test/ruby/' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/lib' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe' -I 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/lib' -r 'c:/DOCUME~1/unkoman/LOCALS~1/Temp/tar2rubyscript.d.5684.1/rubyscript2exe/require2lib.rb' 'test.rb' Stopped. > ruby --version ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] > gem --version 1.3.2
583 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 18:55:38 ] undefined method `list' for Gem::Specification:Class (NoMethodError) Gem::Specification.listメソッドはgem 1.3.1になら存在する。 1.3.2では削除されたようだ。 gatherlibsを修正するか、gemコマンドをダウングレードする。 そしてrubyscript2exeの開発元に連絡をする。
584 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 19:26:02 ] >>583 ありがとう。 どうやらそのようですね。RubyGems1.3.2のスレッドでも話題になってたみたいです。 RubyGems 1.3.2 - ruby-talk-google | Google グループ groups.google.com/group/ruby-talk-google/browse_thread/thread/cc65ca7852f2d562 そこで紹介されていた、Ocraというrubyscript2exeみたいなパッカーがあったので試してみています(windowsのみですが) larsch's ocra at master - GitHub github.com/larsch/ocra/tree/master Ocraそこそこコンパクトな上に、起動が早くてよさげです。 rubyscript2exeは今まで何でもうごいてたので、同じようにスクリプトが動くか検証してみます。
585 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 19:28:40 ] x Ocraそこそこコンパクトな上に、起動が早くてよさげです。 o Ocraそこそこコンパクトな上に、exe化したプログラムの起動が早くてよさげです
586 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 23:45:20 ] どうして、ruby -pの後のgsubはレシーバが省略できるのですか? いつも使ってて便利だなあと思ってるけど不思議に思ってます。 ruby -p -i.bak -e'gsub(/hoge/, "fuga")' data.out
587 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 00:17:28 ] >>586 関数的メソッド gsub が呼ばれているだけだ(こいつは $_ をレシーバとして扱う) String#gsub が直接ワンライナー用にいじられて呼ばれているとかそういうわけではない
588 名前:デフォルトの名無しさん [2009/04/25(土) 08:35:56 ] class SomeClass @@message = "call myself Mr.#{@name}!" def initialize(name) @name = name end end このまま@@messageを参照すると、@nameが未定義の段階で定義しているため出力は"call myself Mr.!"となります。 このように後で@nameに値が入ったとき(あるいは変更されたとき) @@messageを参照する段階で@nameを再度当てはめるとしたら、どのように書けばよいでしょうか。
589 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 08:46:15 ] クラス変数を使わない いやわりとマジで 特定のインスタンスの状態に左右されるクラス変数というのは奇妙 特定のインスタンスの変数を参照する大域変数というのはそれは普通インスタンス変数にする というか、@@name を initialize の中で毎回変更してそれを @@message で参照するという形ではダメなん?
590 名前:588 mailto:sage [2009/04/25(土) 09:24:21 ] >>589 ありがとうございます。た、たしかに言われてみたら使い方もちょっとおかしいし、 そもそもクラス変数でやってたのがよくなかったんですね・・・ 試しに@@messageをメッセージを返すインスタンス"メソッド"にしてみたら問題なく置き換えられました。 なお試してみますm(_ _)m
591 名前:デフォルトの名無しさん [2009/04/25(土) 17:51:40 ] はじめまして。困ってます;至急お願いします。 Rubyをはじめようと思うのですがどうすればいいかわかりません。 まず公式HPに行ってもどれをダウンロードすればいいかわかりません。 ソースコード以外に実行ファイルが見当たりません。 何かをインストール等する必要はないのですか? 僕はパソコンは上級者と言ってもいいほどなんでもできるのですが ここまでわけのわからないことは初めてで焦っています。 まずルビーのプログラムを書く段階までのやり方を教えてください。
592 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 17:54:17 ] またそんな玄人的なネタを投下してw
593 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 17:57:30 ] 初心者だから教えてくれ、という意味? それは唯の対処療法で根本的原因の解決ではない。 頭痛がするから薬を使って誤魔化すのと同じこと。 また困った時に同じように薬使ってごまかすのかな。 使い方はそこらへんに結構転がっているよ。 自分の環境構築するのも技術の一つだよ。
594 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:00:46 ] いや、上級者だといってるだろ
595 名前:デフォルトの名無しさん [2009/04/25(土) 18:09:52 ] もしかしてメモ帳で書く、ということですか? エディターみたいなものは公式サイトで配布していないのですか? 他の候補で見ていたC#なら公式サイトでMicrosoft Visual Basic 2008 Express Editionというのが配布されていました。 簡単に作りたかったのでRubyを選んだのですが本当に困っています。 小さいころにHSP(Hot Soup Processor)をやったことがあるのですがそこの公式サイトでもエディターやテストするためのものが公式サイトで配布されていました。 僕は今そのようなものを探しているのですが見当たりません。 そのようなものは存在しないのですか?
596 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:11:17 ] >>591 > ルビーのプログラムを書く段階までのやり方 1.エディタを用意します。なんでもいいです。目的はテキストファイルを作成することです。 例えばMS-DOSに馴染んでいれば、最悪 copy con hello.rb なんてのでも大丈夫です。 2.思う通りのるびーのプログラムを書いたら、その内容をテキストファイルとして保存して下さい。 ※ 上記の2は、書くまでの段階では必要ではありませんので、飛ばしても結構です。 以上です。
597 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:13:16 ] >>596 俺は君が好きだな
598 名前:デフォルトの名無しさん [2009/04/25(土) 18:17:09 ] >>593 さんの書き込みをヒントに「ruby 開発環境」と検索したところ RDEというエディターを見つけました。とりあえず解決しましたので 回答していただいたみなさまありがとうございました。
599 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:21:05 ] IDEがないというのは上級者にとっては最初に焦る事態なのか なるほど
600 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:27:39 ] >>599 俺は20代だけど、周りみてると統合環境から入るやつが大半だった 学生の時分とかね
601 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:28:02 ] つメモ帳 でよかったのか PC上級者は、プログラムは専用アプリで書くものと思いがちってことなのかな 勉強になった
602 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:29:33 ] 時代は巡るねぇ。
603 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:31:58 ] どっちかというと 下地が分からないからIDEなんだと思う。
604 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:41:18 ] 紙に書いてパンチカードで打ってた時代があったとか、知識や想像の範囲外なんだろうな デバッグは全部プリントアウトとか そんなの実際には知らんから、もしかして俺騙されてる?
605 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:45:09 ] プログラム全体が一望できた時代は、デバッグは全部プリントアウトでも良かったし それの方が効率が良かったんだよ 今はテストケース無しでは不可能だろう、そうするとIDEの力を借りる必要が出てくる。 今ではIDEが使えないのでは上級とは言えないだろう。
606 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:49:51 ] 用は IDEしか使えないと IDEを使ってる ではぜんぜん違うということでしょ?
607 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:50:12 ] 「IDEが使えない」と 「IDEがないと何も出来ない」はぜんぜん違うよ。
608 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:50:27 ] >>605 だが待って欲しい それは本当に、まずルビーのプログラムを書く段階まで、に必要な事だろうか ってあんまりこれ引っ張るのもなw
609 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:50:52 ] 全部を知る必要も無いって事でもある
610 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:56:08 ] パンチカードの思いでをちょっと あれは一瞬で行が入れ替えられる、それを活用したデバッグやトラインアドエラー作業はいろいろと面白い効率の高さがあった。 でもね、あれはCOBOLやFORTRANの時代のプログラムが行単位で記述されているから効率がいいんだ。 今の自由文法でそれは可能だろうか?、否ですね。 今の時代には今のやり方があるって事だ。
611 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 18:56:46 ] 先生! make や rake は IDE に入りますか? あるいは、IDE 足り得ますか?
612 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:00:29 ] >>610 ていうかプログラミングの形態ではなくて、backgroundはどうなっているか を理解しているかどうかの話だと思ってた。
613 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:03:08 ] 背景を追うと、ではどこまで追う気だって話になる、どこかで打ち止めしておかないと、話が進まない。 まあ、中にはC++のように背景無しでは思わぬ罠にはまる、しかもはまっている事に気づいていないなどという恐ろしい言語もあるのですべてとは言わない。
614 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:04:00 ] >>611 IntegratedなEnvironmentでないとIDEとは呼べないと思う。
615 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:05:03 ] >>603 >>606-607 >>612 もちろん、言うまでもなく、そうだろ。 ネタ〜マジの間のどのへんでつきあってるのかわかりにくい流れだな、これ。
616 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:05:48 ] ネタと信じたいと思いつつマジレス、あたりで。
617 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:06:30 ] >>591 つwww.ruby-lang.org/ja/downloads/ 1.Windows版(mswin32、mingw)の場合 どこかでバイナリを配ってる 2.cygwinの場合 同じくバイナリ配られてる 3.Mac OS Xの場合 MacPortで入れればOK 4.Ubuntuの場合 sudo apt-get install ruby 5.Debianの場合 su - apt-get install ruby exit 6.Fedoraなどの場合 su - yum install ruby exit 7.その他Unix系の場合 まずgccやmakeがあることを確認 ソースコードを持ってきて解凍する(やり方はさすがに知ってるだろJK) configureのあるディレクトリにcd ./configure make su make install exit
618 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:23:48 ] >>617 で、どうやってプログラム書くんですか>< って質問だったりするんだなこれが。 解決済みだし、もういいじゃんw
619 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:25:24 ] >>618 初心者スレにはちょっとヤな感じ。自重しよう。
620 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 19:26:02 ] とりあえず、大体皆が同じ認識を持ってることは分かったから なんか嬉しい。
621 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 21:38:18 ] >>618 1.まず適当なテキストエディタ(Windowsなら極論すればメモ帳でもいいが あとあとつらくなる)を準備しましょう 2.次にこのようなプログラムを書きましょう puts "Hello, world" 3.これを拡張子rbにして保存しましょう(メモ帳の場合はすべてのファイルにしてから 適当な名前.rbと名前欄に入力) 4.次にこのようにコマンドを入力しましょう(カレントディレクトリはさっきの プログラムの場所で、rubyへのパスはすでに通っていると仮定する) ruby さっきのプログラム名 5.すると次のように表示されるでしょう Hello, world これでプログラムが実行できていることがわかります
622 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 03:58:24 ] IDE無しのほうが分かり易いというか、IDEの使い方覚えるのが面倒。 汎用IDEといえばこのあたり? pc12.2ch.net/test/read.cgi/tech/1218959013/ 【Java】NetBeans Part4【Sun】 pc12.2ch.net/test/read.cgi/tech/1238338503/ Eclipse統合M27【Java/C/PHP/Ruby/Python/Perl】 pc12.2ch.net/test/read.cgi/tech/1239945063/ プログラマーがよく使うソフト pc12.2ch.net/test/read.cgi/tech/1191875993/ Emacs Lisp 3 pc12.2ch.net/test/read.cgi/tech/1081517094/ 統合開発環境Eclipseプラグイン開発QA
623 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 07:44:04 ] 「IDEが面倒」と思ってる人に聞きたいんだけど Ruby開発において、それでもやっぱりIDEが役に立つ場面ってある? 何度か手を出そうとはしたんだけど、その度にやる気が出ず挫折している 「IDEのこんな部分が便利」という点があれば教えてほしい
624 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:41:18 ] RadRails使っているよ。補完重すぎるし、候補で過ぎて意味ねえ そんなにすごいいいかって言われると、ないよりマシって感じ。てか重い
625 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:51:16 ] RadRailsのいいところ ・GUIでデバッグできる。 ・メソッドにカーソル合わせるとドキュメント表示(今は日本語化ける) ・インテリセンスみたいな構文考慮した補完が効く(重い、候補多すぎ) ・ファイル構造をツリー表示 ・rake タスクをGUIで選択実行 他なにかあるかなー。文脈非依存の単語補完とかスニペットはテキストエディタでもあるしな。 基本的には、他のIDEと一緒だと思うけど、 全体的にはまだまだ。とりあえず、IDEほしいという人向け。 Visual StudioとかCodeGear(Borland)みたいなIDE想像したら駄目。 あと、>>624 も言っているけど、静的型言語のIDEみたいな補完じゃない。 インテリセンスとかで高速で補完しまくってガリガリ書いていくのを経験してきた人が使ったら、 たぶんガッカリすると思うよ。 NetBeansはプロジェクトルートに.rb置けないww ので即アンインストールした あと、クリップボード処理がうんこ。まともにコピー、ペーストもできないIDEワロタ めちゃくちゃ軽くて初見はすばらしかったんだけどね
626 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:54:36 ] RadRails追加。というか、ほとんどEclipseの機能だと思うけど ・インクリメンタルでメソッド選択してジャンプ ・インクリメンタルにファイル検索して開く ・指定ファイルの指定行に飛ぶブックマーク機能 Aptanaの機能も入れるなら、Aptana Cloudと連携してIDEから一発デプロイとかまあ、あるけどさ (でもどうせデプロイはCapistranoとかで書いてるでしょみなさんは)
627 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 08:56:54 ] NetBeansは、autotest対応はよかったな。 autotest/screenみたいに、エディタの下に色つきで表示出る
628 名前:デフォルトの名無しさん [2009/04/26(日) 22:43:18 ] 1.8.7とVistaHPという環境でコマンドラインからRubyファイルを実行すると pメソッドもprintメソッドも日本語が文字化けします。 起動オプションで -Ks を指定しても文字化けします。 ファイルのエンコーディングはUTF-8ですがSHIFT-JISで保存し直しても文字化けします。 NetBeansでデバッグすると、printでは文字化けしませんがpだと文字化けします。 何が原因でしょうか?
629 名前:ごすけ [2009/04/26(日) 22:59:17 ] こんばんは。質問させてください。 /*引数(自然数)n(<=1000)の入力に対して1~nの間の素数をすべて求めて、 コンソールに表示するプログラムを作成せよ。(ちなみに1は素数ではない)*/ のC言語でのプログラムの作り方を教えてください。ルートは使わず、なるべくfor文で お願いします。
630 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 00:56:22 ] pc12.2ch.net/test/read.cgi/tech/1240226599/ C/C++の宿題片付けます 125代目
631 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 09:54:55 ] >>628 Vistaのことはわかんけど、 >NetBeansでデバッグすると、printでは文字化けしませんがpだと文字化けします。 これはしょうがないんじゃないかな。他の環境でも同じだと思う。 -- hoge.rb -- puts 'ほげ' p 'ほげ' ----------- $ ruby hoge.rb ほげ "¥343¥201¥273¥343¥201¥222" 正確に言うと、これは文字化けではなくて、文字列をバイナリ表記したもの。 p は引数をinspectした結果を表示するけど、日本語を含む文字列だとinspectするとバイナリ表記になってしまう。
632 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 13:32:05 ] array への追加についての質問です。 DBのいくつかのテーブル数分検索し、検索結果を配列に追加したいです。 my_array = [] for table_name in table_names my_array.push = my_func(table_name) end 上記のコードだと、my_func が返す array を、my_array の要素とするので2重の配列になってしまいます。 result = my_array + my_func とすると、 配列の後ろにどんどん要素を追加することができ、これが自分のやりたいことなのですが、 Rubyのリファレンスをみると、array の + は my_array は変更せず、左辺に新しい配列を作成します。 上記の for table_name in table_names は結構なループ量になり、 かつ my_func が返すレコード件数(配列のサイズ)も大きいため、毎回 新しい配列を作って返すのは、コストが高いのではと懸念しています。 そこで下記のようなコードを書きましたが、+ でつなげるのと下記のコードと、 どちらがいいでしょうか? my_array = [] for table_name in table_names result = my_func(table_name) result.each do |val| my_array.push val end end
633 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 13:58:34 ] my_array.concat(my_func(table_name))
634 名前:632 mailto:sage [2009/04/27(月) 14:09:10 ] >>633 ドンピシャです!! どうもありがとうございました。 おなじ Array のマニュアルページに書いてあるのに見逃してしまった。
635 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 15:54:07 ] Singletonをインクルードしたクラスのinstanceメソッドに引数渡せないのって不便くね?
636 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 16:43:27 ] 生成時に渡す引数によってオブジェクトの振る舞いが変化するようなものは そもそも Singleton に向かないってことなんじゃまいか? 色々必要ならそんだけクラス作れよと
637 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 17:01:35 ] instanceに引数が渡せるほうが不安だ。
638 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 04:54:52 ] >>635 Singletonをインクルードしたクラスを生成するメソッドを書けばおk
639 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:05:27 ] どこで聞いたらいいのかわからんのですが、ここで聞きます。 Ubuntu 8.0 LTSだと apt-getで入るのが Rubyが1.8.6なのですが、1.8.7が使いたいです。 1.8.7使うには自分でコンパイルするしかないのでしょうか? Rubyスレの方がよかったら誘導してください
640 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:09:08 ] すいません、Ubuntu 8.0 LTS → Ubuntu 8.04 LTS です
641 名前:635 mailto:sage [2009/04/28(火) 13:17:57 ] ごちゃごちゃやってたら、頭の中がこんがらがってきた。 結局コンストラクタに引数を渡せるようにしたままsingleton化したい場合は、Singletonモジュールは 使わずに、該当クラスのnewメソッドを複数のインスタンスを生成できないように書いてしまえばいい だけ? とか思ったが、何か根本的に間違ってるような気もするw クラスメソッドとしてのnewは明示的に書けてしまうみたいだけど、その場合自分(クラス)のインス タンスを生成するコードはどうやって書けばいいのかな? newメソッドはインスタンスを返すのが 普通だから、それを生成するコードがどうしても必要だよね?
642 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:22:57 ] >>640 自前ビルドでRubyを入れると、他のRubyに依存してるパッケージも全て 自前ビルドするか、パッケージの依存関係をごまかすかしなきゃならない。 どちらにしてもすごく簡単ではないけど大丈夫?
643 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 15:58:25 ] >>641 自己レス。 特定のクラスが(自分の定義中で)自分のインスタンスを生成するには、クラスメソッド(たとえばnew) の中で<自分の名前>.allocateを実行すればいいらしい。(allocate自体はどこからでも呼べる) ただしそのインスタンスをinitializeするには、(自分の定義中にある)他のインスタンスメソッドを 介さなければならない。 なぜなら、<自分の名前>.allocateの戻り値をinstで受け取ったとするとinst.initializeとしたくなるが、 initializeはprivateメソッドなのでレシーバ省略形式でしか呼び出せず、レシーバ省略形式で呼び出す には、(クラスメソッドから呼び出せる)publicなインスタンスメソッドの中で呼び出すしかないから。
644 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 18:20:00 ] >>639 >1.8.7使うには自分でコンパイルするしかないのでしょうか? うんそう。 UbuntsuってDebian系だよね。DebianだとRubyが複数のパッケージに分散していてインストールするのがめんどくさいから、 おれが試した時は自前でインストールするほうが簡単だった。 以下おれの方法。rubyのバージョンごとにディレクトリを分けているので、configureするときに--prefixをつけてる(つけなければ/usr/localになる)。 wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p160.tar.bz2 tar xjf ruby-1.8.7-p160.tar.bz2 cd ruby-1.8.7-p160/ sudo mkdir -p /usr/local/ruby/1.8.7-p160 ./configure --prefix=/usr/local/ruby/1.8.7-p160 make sudo make install
645 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:24:22 ] パッチレベルすらディレクトリを分離してるのか。 まあその方が、トラブル時には切り分けやすいか…。
646 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:27:09 ] ディスクがたくさんあっていい感じだ
647 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:29:02 ] 文字列、配列、ハッシュの初期化の書き方についての質問です。 以下のそれぞれのペアは、等価?(どっちで書いても良い?) my_string = "" my_string = String.new my_array = [] my_array = Array.new my_hash = {} my_hash = Hash.new
648 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:35:46 ] >>647 Yes
649 名前:647 mailto:sage [2009/04/28(火) 19:37:17 ] >>648 どうもありがとうございます!
650 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 22:30:36 ] >>643 inst.instance_eval{initialize} じゃダメ?
651 名前:デフォルトの名無しさん [2009/04/28(火) 22:35:42 ] さすが マーチンファウラーお気に入りのベストパートナー 世界に羽ばたく Ruby on Railsオフショアアジャイル開発 www.tech-arts.co.jp/news-and-topics/press-releases/20090427.html
652 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 23:17:58 ] てか self.class.new でダメなことって少ないよな
653 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 00:17:47 ] 今まで数年間、テキストエディタのみでプログラミングしていたのですが そろそろIDEにも、試しに手を出してみようかと考えています Rubyに対応したIDEを探してみると、RDEの他には Aptana Rails、NetBeans、Eclipse DLTKが見つかったのですが これらの中で「これがオススメ」というものはありますか? シンプルで理解が難しくないものを求めているのですが……
654 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 00:44:01 ] 特にありません
655 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:02:37 ] テキストエディタのみとかおれには考えられん 環境がなかった昔はもちろんやってたけどな
656 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:23:39 ] 俺は今のところ IDE なしでもそんな不便はしてないかな Cygwin + bash + vim + rake + 自作ツールっていう構成だけど ただ、やってるうちに Rakefile がでっかくなっていくけどw
657 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 02:02:23 ] テキストエディタのみって言っても UNIX環境の支援のもとに emacs やら vim 使ってるのと Windowsでメモ帳とか使ってるのとでは全然違うよな
658 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 04:01:50 ] emacs + αで十分IDEチック
659 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 06:02:34 ] メモ帳はまさにメモ帳であって。 emacsはフルカスタマイズ可能!ってか。 変態的な操作方法をもちょっと控えて、GUIベースのタブでバッファを切り替えるような ものなら、もうちょっとご新規さんにもアピールするかと思うんだが。
660 名前:639 mailto:sage [2009/04/29(水) 09:15:30 ] >>642 そうなのかー。 >>644 バージョンごとにやってるんですか。うおすごいですね。 コンパイル自体は大変ではないみたいですね。 問題はバージョンアップかあ。 aptとかで入れれたらうpでとも自動化できるのになあ っと思って検索していたら、8.10のパッケージを使って1.8.7を入れる方法を見つけました。 最近のUbuntu では Ruby 1.8.7が標準みたいですね 簡単そうなので、まずは、これから試してみたいと思います。 Installing ruby 1.8.7 (and guessnet) on Hardy ? vanutsteen.nl => nerds only www.vanutsteen.nl/2008/06/29/installing-ruby-187-and-guessnet-on-hardy/ スレ違いそうな話題にレスしていただきありがとうございました。 とういか、Ubuntuスレに投下してたつもりでしたw
661 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 09:26:19 ] >>659 (EmacsをEmacsとして理解できないものには)Emacsを使うのは難しい。 Aquamacsだとタブが出るけどな。
662 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 11:35:56 ] >>643 たぶん普通は require 'singleton' class C include Singleton def initialize @i = nil end attr_accessor :i def self.init(i) c = self.instance c.i = 1 c end end p C.instance #=> #<C:0xb7d853e4 @i=nil> p C.init(1) #=> #<C:0xb7d853e4 @i=1> p C.instance #=> #<C:0xb7d853e4 @i=1>
663 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 12:08:41 ] >>662 それを許すんならもはや定数に代入した普通のオブジェクトと変わらない気が
664 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 12:24:00 ] ていうか、読みにくい
665 名前:635 mailto:sage [2009/04/29(水) 15:10:47 ] みなさんレスありがとうございます。 >>650 > >>643 > inst.instance_eval{initialize} じゃダメ? それでよさそうですね。初めて知りました。 もともと>>635 と書いたのは、「引数を渡したいのは初期化の時だけだが、一度instanceしてから 値を渡すのが面倒」というのがあったからなので、>>662 のやり方が簡単で良さそうです。 >>662 の中の > c.i = 1 は > c.i = i ですよね。 結局自分もsingletonにする意味あんまりないなと思い始めてしまってますが、最初の動機がたいした ことじゃなかったということですね。
666 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 15:44:41 ] ruby-pg-0.8.0ってPGresultのresultって使えますか? num_tuplesとかは正常なのにresultとかstatusだとNoMethodErrorになります。 今までずっと古いやつを使っていたんですがメソッド名が変わったりとかしたんですかね?
667 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 18:01:56 ] >>666 おお!俺も数日前にそれで困ってましたw 俺がしたこと 1) requireの置き換え require "pg" # require "postgres" 2) resultメソッドの置き換え res.map {|rowmap| res.fields.map {|f| rowmap[f]}} # return res.result resultが無くなったのか、名前が変わったのかは知りません。 statusのほうは使ったことがありませんのであしからず。
668 名前:666 mailto:sage [2009/04/29(水) 18:39:50 ] >>667 ありがとうございます!取得できるようになりました! 根本的な原因は気になりますが、 とりあえず動くようになったのでよしとします。
669 名前:653 mailto:sage [2009/04/29(水) 18:58:20 ] いろいろなご意見ありがとうございます! 基本的にエディタ派の方が多いようですね ただ、655さんの環境も気になります >>657 Windows環境で、主にNotepad++を使ってスクリプトを書いております コマンドライン環境はNYAOS+GnuWin32の構成です
670 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 12:34:03 ] >>669 >>625-627 から上の流れも参照してくれ
671 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 18:29:51 ] VRFormってどこにあるの?rubyのフォルダを検索しても見つからない。 ほとんどのコントロールはvrcontrol.rbにあるのに。
672 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:25:00 ] Array同士を簡単に同じでない行を調べることってできませんでしょうか? a - a2みたいだと、差分という感じではない気がします。 通常のdiffツールだと、出力結果が上から調べるので順番に依存してしまいます(´・ω・`)
673 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:26:40 ] >>672 あああああ、 pp (a2 - a) pp (a - a2) とお互い引けば、いいのかw 書いて気づいた 同じでない行ではあるか
674 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:44:33 ] メソッド呼び出しにおいて、メソッド名と引数を囲む括弧の間には、 スペースを入れないことをおすすめする。
675 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 17:16:25 ] 排他的論理和は (a|a2) - (a&a2) でも
676 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 17:32:42 ] エクスクルゥーシブー・オアッ!!
677 名前:デフォルトの名無しさん [2009/05/02(土) 19:53:16 ] 勉強始めたらいきなりこんなもん見つけたんですけど。 バグでしょ? #ruby 1.8.7p72 mswin32 module A def f() print "test ok!\n" end end #include A A::f() test.rb:7: undefined method `f' for A:Module (NoMethodError) ちゃうか〜