[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 14:15 / Filesize : 278 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 27



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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

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)
ちゃうか〜

678 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:57:48 ]
>>677
ttp://www.ruby-lang.org/ja/man/html/Module.html#module_function
素のままだと「Aというオブジェクト」がもってるメソッドじゃないし。

679 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:58:24 ]
Rubyに限らないけど、まず自分のプログラムに問題がないか考えた方がいいよ。
2〜3回くらい恥をかけば直るんだけどね。最初からかかないことにこしたことはない。

680 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:59:58 ]
Rubyのめんどくさいところにいきなりぶつかるセンスは賞賛に値すると思う

681 名前:デフォルトの名無しさん [2009/05/02(土) 20:17:12 ]
そっか、バグじゃないかぁ
コメントアウトしてあるinclue Aを生かすと、動作しちゃうんですけど。
変じゃね?

682 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 20:19:44 ]
>>681
どうしてコメントをはずすの?
なんのためにコメントをはずすの?

683 名前:677 [2009/05/02(土) 20:32:47 ]
なんのためにといわれても...
テストプログラムだからいろんなケースを比較して、
変じゃないかなと

684 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 20:39:47 ]
つまり、意味もわからずincludeしたりしなかったりを試していると。




685 名前:677 [2009/05/02(土) 20:56:15 ]
print Math::PIは動くね。
もっとも、Mathはrubyインタープリターによって
特別待遇を受けているだろうから、あまり比較にはならんだろうけど。


686 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 21:18:41 ]
>>685
>>681は目の付け所いいなと思ったけど・・・
Module#module_functionは読んだ?

687 名前:677 [2009/05/02(土) 21:37:08 ]
なるほど、すくなくとも仕様であることは、理解しました。
どうもありがとうございます。
しかし、なんとも不可解に見える仕様。でも、理由があるんでしょう。
勉強します。

688 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 21:37:55 ]
>>683
ちゃんと理由を考えながらテストしないと、あまり意味がないぞ

結論から言うと理解を間違えている
A::f() の形でメソッドを呼びたいなら、次のような方法を使うべき
(他にも特異クラスを使った方法とかあるけど、ここでは省略)

1.
def A.f()
end

2.
module A
 module_function

 def f()
 end
end

689 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 22:54:31 ]
module_functionというのは知らなかったので試してみた。
折角なので張っておく。 これで>>677の疑問も解けるとよいけど。
irb(main):001:0> module M
irb(main):002:1> def self.f() [:module, self] end
irb(main):003:1> def f() [:instance, self] end
irb(main):004:1> module_function
irb(main):005:1> def mf; [:module_function, self] end
irb(main):006:1> end
irb(main):007:0> class C
irb(main):008:1> include M
irb(main):009:1> def cmf() mf end
irb(main):010:1> end
irb(main):011:0> c = C.new
=> #<C:0x28de620>
irb(main):013:0* M.f
=> [:module, M]
irb(main):014:0> C.f
NoMethodError: undefined method `f' for C:Class
irb(main):015:0> c.f
=> [:instance, #<C:0x28de620>]
irb(main):016:0> M.mf
=> [:module_function, M]
irb(main):017:0> C.mf
NoMethodError: undefined method `mf' for C:Class
irb(main):018:0> c.mf
NoMethodError: private method `mf' called for #<C:0x28de620>
irb(main):019:0> c.cmf
=> [:module_function, #<C:0x28de620>]
irb(main):020:0> include M
=> Object
irb(main):021:0> mf
=> [:module_function, main]

690 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 23:12:33 ]
さっきのを書いている間に生じた疑問がひとつ。
親クラスのクラスメソッドは継承されるけど、
インクルードしたモジュールのクラスメソッド(?)は継承されない。
module_functionのクラスメソッド側もやはり同じ。

いったいどういう理由でこうなっているの?

irb(main):001:0> module M
irb(main):002:1> def self.f() [:module, self] end
irb(main):003:1> module_function
irb(main):004:1> def mf() [:module_function, self] end
irb(main):005:1> end
irb(main):006:0> class C0
irb(main):007:1> def self.cf() [:class, self] end
irb(main):008:1> end
irb(main):009:0> class C < C0; include M end

irb(main):010:0> C.f
NoMethodError: undefined method `f' for C:Class
irb(main):011:0> C.cf
=> [:class, C]
irb(main):012:0> C.mf
NoMethodError: undefined method `mf' for C:Class
irb(main):013:0> C.new.mf
NoMethodError: private method `mf' called for #<C:0x28d636c>

691 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 08:53:23 ]
実はrubyにはクラス(モジュール)メソッドという仕組みはなくて、クラスに定義された
特異メソッドが他の言語のクラスメソッドと同じように使えるだけ(と思ってる)
クラスの継承で特異メソッドが継承され、includeでは無視されるのは仕様としか
大体「クラスメソッド」として使うんだから「クラス名.メソッド名(引数)」の
クラス名にはメソッドが定義されているクラスを使うべきだろう

692 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:01:17 ]
継承してないから継承されない
じゃ駄目かね

693 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:25:37 ]
Mix-inてのは親子関係が木構造になるように制限をした多重継承だと
理解していたんだけど、Rubyのモジュールはちょっと違うということかな。

上のコードでいうと、c is_a M だけど C is_a M ではなかったから、一瞬
そういうものかと思ったものの、 C is_a C0 というわけでもなかったぜ。
うーん、いまいち腑に落ちないな。


694 名前:デフォルトの名無しさん [2009/05/03(日) 20:27:14 ]
>>690
メソッドを継承すると遮蔽定義によって、メソッドの動作を変更できてしまう
からじゃね?
モジュールは多重にインクルードできるから、継承経路によって、
振る舞いが変わる可能性があるので、そういう仕様になってるんじゃねえかなぁ
よくわからんけど



695 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 21:57:18 ]
>>690
>親クラスのクラスメソッドは継承されるけど、
>インクルードしたモジュールのクラスメソッド(?)は継承されない。
>module_functionのクラスメソッド側もやはり同じ。
>いったいどういう理由でこうなっているの?

そういう仕様だから。
もちょっというと、includeはメタクラスには影響を与えないから。
自分で調べるなら「Ruby クラス階層図」でぐぐるといいかも。

696 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 22:56:40 ]
あの辺の理論はこんがらがる
Class.class => Classって辺りで混乱が最高潮






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<278KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef