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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
596 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:18:42 ] >>594 一行目の時点で >moge.executeが参照され実行されて得られた結果 がhogeに収まる 二行目はすでに収まってるhogeの中身を出力するだけ >>594 の日本語の部分をrubyで書くとこんな感じ? hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない print hoge.call # Procを実行する(moge.executeが実行される)
597 名前:デフォルトの名無しさん [2009/10/07(水) 18:22:48 ] 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から何かの数字を得ているようなのですが どういう動きをしているんでしょうか?
598 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:24:35 ] そのような目的に使うデータ構造としては、ヒープツリーや優先順位つきキューというものがあり、 Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、 既存のものをさがすかということになります。 以下、最近できたものなので、あるよ、という紹介しかできませんが、 depqという優先順位つきキューのgemがあります(あるはずです)。 ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/39248?39066-39441
599 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:21 ] >>598 は>>593 あてね
600 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:45 ] >>596 考えていたことと逆でした。ありがとうございます。
601 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:35:10 ] >>597 ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#printf ttp://www.ruby-lang.org/ja/man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html 個人的には Ruby ではないので嫌い to_s で問題の起こらない範囲で puts "#{rows} rows were inserted" と書くべき
602 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:40:22 ] >>601 String#%は?
603 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:42:04 ] >>602 異端審問される恐れがあるので 人前に晒すスクリプトでは使わないように
604 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:44:10 ] スタイルの押しつけうぜぇ
605 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:14 ] 個人的にString#%は蛇道
606 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:21 ] >>601 どもです。putsに書き換えて実行したところ同じように出ました。 どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して 4つの要素をDBに登録していますよね。
607 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:53 ] >>604 Ruby使うの今すぐやめれ プログラミングスタイル強制要素が無数に散りばめられてるぞ
608 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:58:58 ] >>601 君にはPythonが向くんじゃないかな?性格的に。
609 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:02:23 ] >>608 sprintf は Ruby のものではないということを知らない?
610 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:04:06 ] >>606 そりゃそういうふうに作られてるからだろ do のマニュアル読め わざわざカウントして数値を返してるようなので初心者殺しではある
611 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:10:25 ] sprintf と pack/unpack は「Ruby らしい」糖衣実装が望まれていながら、 ダラダラと旧来の仕様を引きずってきたんだよな オタクが他の言語の知識を流用できて便利というただそれだけの理由で
612 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:00 ] >>611 あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます 確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に
613 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:17:18 ] >>610 どもっす。doのマニュアルを探してきます。
614 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:18:04 ] printf類にrubyらしい実装なんて不要 他の言語と違う動作されたらそれこそ非難の的
615 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:33 ] prntf などの「メジャーな関数」をなくせという話ではないように読めるが
616 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:25:25 ] >>611 sprintfは別言語でそれやられて大迷惑 >>612 も言ってるけどいまさら別に覚えるのも嫌だから 今までと同じでいいよ・・・
617 名前:593 mailto:sage [2009/10/07(水) 19:27:45 ] >>595 minですね 探し切れてませんでした ありがとうございます >>598 なるほど、確かに求めてるのはヒープみたいなものでした 参考になりましたありがとうございます
618 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:32:02 ] 別にみんな自由に書けばいいじゃんw Obsoleteでもない限り機能として用意されてるんだから使えばいいし 「個人的に嫌い」な人が大半になればそれを使わないのがデファクトスタンダードになるだけだし
619 名前:591 mailto:sage [2009/10/07(水) 19:37:20 ] どうもありがとうございました >>592 うーん、もうちょっと明示的にスコープの話が書いてあると嬉しいような。 doc.okkez.net/static/187/method/Kernel/m/require.html doc.okkez.net/static/187/method/Kernel/m/load.html
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を返してほしい。