1 名前:デフォルトの名無しさん [2009/10/24(土) 06:18:12 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
85 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:15:39 ] Ruby1.9.1 の Windows 用でそれをするとはいろいろな意味でチャレンジャーというか煽り屋というか
86 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:20:42 ] そんなんただのラブレターだろ 「いますぐRuby1.9.1の最新版パッチのWindowsバイナリを公開しろ、 さもなくば基幹的デファクトスタンダードライブラリのアップデート不能を以ってRubyの価値を減じる」 というラブコール
87 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:26:30 ] 最新版のWindowsバイナリー! 早く来てくれー! 俺もコンパイルに成功すれば、Windowsバイナリ公開したいのに make test-allがなかなか通らない…… メンテナの方々はどんな作業をやってるんだろう
88 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 08:33:12 ] ttp://rubyforge.org/frs/?group_id=167 ruby-1.9.1-p243-i386-mingw32 は一応ないわけでもない
89 名前:12 mailto:sage [2009/10/26(月) 10:14:19 ] >>13-18 Thanks rspecはちゃんとck(cygwin)でも色分けできるんですけどね・・・。 TERMはcygwinでした。export TERM=xtermとかにもしてみたけど駄目ですタ(この辺よく理解してないです) >>17 ついでにPower Shellも入れてみたんですが、UTF-8対応して中田 orz nkfでUTF-16にしても化けるし意味わからんちん
90 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:49:19 ] とりあえず ruby が糞だということは良く伝わりました 本当にありがとうございました
91 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:57:45 ] ラブレターなら直接相手に言わないと伝わらないんじゃないか
92 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:07:20 ] >>91 リア充は帰れ ラブレターってのは 「○○って△△さんのこと好きなんだって」 「えーうそー△△ちゃん可哀想〜」 みたいに周りからじっくり攻めていくのが正しい姿
93 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:10:00 ] 明らかに周りからも祝福されてねーじゃねーか
94 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:24:46 ] なにごとも一度でうまくいくことはそうそうないよ 突然話を振るよりも事前のネゴとコネと日頃のコミュニケーションが大事
95 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:33:47 ] >>92 > 「えーうそー△△ちゃん可哀想〜」 やめろ
96 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:57:09 ] クソワラタwww
97 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:59:52 ] ruby1.8.7をcheckinstallでRPMパッケージを作成してインストールしたのですが、 ri -cコマンドを打っても標準ライブラリのクラスが表示されません。(Railsのクラスのみ表示される) ri GCと打ってもNothing known about GCと出力されるのです。 これはrubyのriドキュメントがインストールされてないということでしょうか? RPMパッケージでインストールせずにconfigureでオプション付けたりしないといけないのかな。
98 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:51:33 ] >>97 checkinstallはよくわからないけど、自前でコンパイルするときは ./configure make sudo make install sudo make install-doc # ドキュメントのインストール が必要だった気がする
99 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:59:15 ] 質問です。Mershall使ってインスタンスの状態を保存しているのですが 一度インスタンスをnewしてdumpした後、その後オブジェクトを変更して 追加されたor削除されたクラス変数を検知して初期化したいです どのようにしたらいいでしょうか 以下のようなソースです class DataObj attr_accessor :cnt def initizalize @cnt=0 end end class SaveData attr_accessor :data def initialize(file_name) load(file_name) end def load(file_name) if File.exist?(file_name) @data = File.open(file_name, "rb"){|f| Marshal.load(f) } else @data= DataObj.new() end end def save File.open("test.dat", "wb"){|f| Marshal.dump(@data, f) } end end
100 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:35:07 ] よーわからんが、Marshalはオブジェクト全体の復元しかできない 復元してからオブジェクトが同一かどうかチェックするしかないな
101 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:52:34 ] >>100 そうですね、Marshalだとかそういうライブラリは、この際あまり関係なかったですね 保存時のオブジェクトが復元時のインスタンスのオブジェクトと違う場合を許容したい場合は どのような処理をすればいいでしょうか、ということみたいです クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか イメージとしては クラス変数にし対して obj.each{|i| i=0 if !i.exist? } という配列処理っぽいことがやりたいです (もちろん配列じゃないのでこの操作は不適ですが)
102 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:22:48 ] クラス変数は @@ で始まる @ で始まるのはインスタンス変数 初期化の意味がわからない 特定の条件の場合にオブジェクトを同一とみなして欲しいというときは 適宜 == メソッドを再定義して new == old を行う class C def initialize(params=nil); @params=params; end def ==(other) self.instance_variables.all? do |e| self.instance_variable_get(e) == other.instance_variable_get(e) end end end c1 = C.new('a') c2 = C.new('b') p c1 == c2 #=> false c3 = C.new('a') p c1 == c3 #=> true ('a' == 'a' が true なので) default = C.new c4 = C.new [c1, c2, c3, c4].each do |c| if c == default then puts 'default!' else puts 'modified' end end # => modified, modified, modified, default!
103 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:29:36 ] >>101 >クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか よーわからんけど、オブジェクトにバージョン番号をつける方法じゃだめかな。 バージョン番号が違っていれば初期化、とか。
104 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:29:49 ] ===
105 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:43:32 ] 質問です。 1. プラットフォームがwindowsかどうかを判定する方法は、どうするのがいちばんいいでしょうか。 RUBY_PLATFORM をチェックするのが王道だと思いますが、そのチェックの仕方で悩んでいます。 2. windowではバイナリファイルの読み書きにはFile.open(file, 'rb')のように'b'をつけないといけませんが、 これはcygwinでも同じでしょうか。 ('b'が必要なプラットフォームが何かを知ろうとしています)
106 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:58:24 ] fopenの仕様を読みましょう
107 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:04:18 ] 皆さんありがとうございます ・・・恥ずかしながらインスタンス変数とクラス変数を勘違いしていました >>103 氏のいうようなバージョン管理でやろうとすると class DataObj attr_accessor :ver,:a,:b,:c def initialize(obj) # @ver=0 @a,@b,@c=0,1,2 end end class DataObj_1 < DataObj attr_accessor :d,:e,:f # 変数を追加 def initialize(obj) super @ver=1 @a,@b,@c=obj.a,obj.b,obj.c @d,@e,@f=3,4,5 end end current_version=1 a=load("save.dat") a=Data_Obj_1 if a.ver == current_version # あるいは a === DataObj_1 かな? ということでやりたいことは、できそうです スマートな方法とは言い難いですが・・・
108 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:08:23 ] すいません、最後は a.ver が 0 のとき if a.ver < current_version の間違いですね
109 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:13:30 ] >>105 1. は ttp://jp.rubyist.net/magazine/?0017-CodeReview#l17
110 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:32:33 ] >>109 その記事にある「Win32API.soがrequireできるかどうか」は、 1.9だと全部ダメとか、1.8でもWINE環境でrequireできちゃう とかあるので注意。 2の方は、いわゆるDOSISHなプラットフォームが該当する。 具体的にはcygwin以外のWindows、DOS(djgpp)、 x68000(human68k)、OS/2(emx)
111 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:37:09 ] 自動で判断するぶんには RUBY_VERSION =~ /mswin|mingw/ でいいんじゃね クラス変数とかに結果入れておいてユーザーが変更可能にしておくとかすれば喜ばれそう
112 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:52:38 ] バイナリ扱う時に環境判断せずに「とりあえずbつけとけ」ではだめなんだっけ?
113 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:55:16 ] ミリ秒の差が数千万円になるようなエッジな環境では命取り
114 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:55:44 ] >>112 それが望ましいっす。
115 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:32:51 ] >>107 Marshalで保存したオブジェクトは自分のクラスを記録してるから 別のクラスのインスタンスとして復元する事は出来ない Hashを中間データとして使う方法をすすめる ついでにmarshal_dumpとmarshal_loadについて調べておくといい
116 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:39:58 ] >>102 で用が済むと思うのだが
117 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 11:09:13 ] 質問します。 ディレクトリ内にあるhtmlファイルの読み込みで、Data/a/1.htmlを読み込ませたあと Data/b/1.html→Data/c/1.html・・・とずらずらとディレクトリ違いの同じ名前のhtmlファイルを 読み込ませるにはどうしたらいいですか?
118 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 11:12:47 ] それに必要なのはなんだと思う? というようなとこから考えて欲しいと思った とりあえずいちばん簡単なの dirs = ['a', 'b', 'c', 'd', 'e', 'f', ...] dirs.each do |dir| File.open("#{Data/#{dir}}/1.html"){|f| f.read} end
119 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 11:13:36 ] >>117 Dir.glob("Data/*/1.html") do |file| ... end
120 名前:117 mailto:sage [2009/10/27(火) 11:24:16 ] 即レスどうもです! とても参考になります! ちょっくら試してみます。 ありがとうございました!
121 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:59:08 ] しつもーん! どこからも参照されなくなったオブジェクトは GC によって破棄されるだよね? loop { /正規表現オブジェクト/ } この場合 /正規表現オブジェクト/ はループのたびに生成されるの?
122 名前:中田 mailto:sage [2009/10/27(火) 22:59:18 ] >>89 Power ShellのUTF-8対応なんてしらん
123 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:04:27 ] >>121 いいえ、固定の正規表現リテラルはパース時にチェックされ、スクリプト内で1回だけ生成され保持参照されます ただし、変数を #{ } などで含んでいる場合は毎回変数を参照して新規作成される 最初の1回だけにしたい場合は //o と o オプションをつける この理屈で言うと、/re/ がたくさんあるとメモリ食う
124 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:19:19 ] >>123 なるほど、ありがとうございました。
125 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:23:51 ] >>12 cygwin1.5系や素のcmd.exeは未だにCP932だから、UTF-8はそのままだと表示できません。 考えられる方法はだいたい以下の通り。 (1)素のcmd.exeにて、nkfでCP932に変換して表示 (2)cmd.exe にて chcp 65001 によって UTF-8 モードにして UTF-8 を表示 (挙動妖しい) (3)cygwin 1.5 にて、nkf で CP932 に変換して表示 (4)cygwin 1.7 (デフォルト UTF-8) にて UTF-8 で表示 (開発途上) まぁ、どれもろくでもないんで、cucumberだったらHTMLにでも書き出して、 ブラウザで見た方がいいんじゃないですかね。
126 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:31:54 ] そーいえば、PowerShellはシェルとしてはcmd.exeとしては同レベルです。 コネがある方がいらっしゃいましたら、ちゃんとUnicode通るようになんとかしてやってください
127 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:05:56 ] WriteConsoleWでがんばってください
128 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:30:42 ] "123.6"をdecimalの123.6に変換するメソッド(例えばto_iのようなもの)はないでしょうか?
129 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:39:40 ] decimalではなくてfloatでした。すいません。
130 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:56:03 ] >>128 マニュアル嫁 文字列だから String のマニュアルを読む ttp://www.ruby-lang.org/ja/man/html/String.html
131 名前:12 mailto:sage [2009/10/28(水) 09:59:20 ] ロックマンが海外で『Mega Man』の名称に変更された理由とは… - Game*Spark gs.inside-games.jp/news/196/19696.html 1993年に発行されたGame Playersマガジンのカプコン副社長Joseph Morici氏のインタビューによると、 当時日本で作られたロックマンのローカライズを検討していたMorici氏は、“Rockman”というタイトル名が単純に気に入らなかったそうです。 ”あのタイトルは酷すぎました。そこでMega Manという名前を思いついたんです。 するとそのアイデアは気に入られて北米版で使われることになりました。ゲーム内容は日本版と全く同じでしたけどね。” ↓ パッケージ画像 gs.inside-games.jp/_files/images/9696.jpg ___ / ||Mega|| ∧_∧ |.....||Man || ( ) どうしてこんなことに… | ̄ ̄\三⊂/ ̄ ̄ ̄/ | | ( ./ /
132 名前:12 mailto:sage [2009/10/28(水) 10:00:08 ] 誤爆
133 名前:12 mailto:sage [2009/10/28(水) 12:03:40 ] 変なもん誤爆しちゃった… >>12 の件ですが、結論から言いますと、 --color を引数に明示的に指定することで解決しました。 コマンドプロンプトでは色づけされる、んならすでに指定してたんじゃないんかい!と言われそうなのですが、 実際には指定しておらず、 .featureファイルに以下の記述をして「i18nで日本語を使う」とcucumberに知らせていた場合にだけ、 何故かコマンドプロンプトのみ色付けされるようでした。 # language: ja --colorの指定は、ルートディレクトリにcucumber.ymlファイルを置いて、 default: features -f pretty --color -l ja のように記述することで、デフォルトの引数を指定できました。 とりあえず、解決ということでありがとうございました。
134 名前:12 mailto:sage [2009/10/28(水) 12:04:50 ] 連投スマソ >>125 ありがとうございます。 もっとロクでもない方法(?)として、以前はRUBY_PLATFORMがwin32でTERMがnilのときだけ、 $stdout.writeでSJISにnkfで変換する方法も使ってました。 Railsスレあたりに投下した覚えがあるので検索すればでてくるかも。 cygwinはUTF-8化用のDLLを入れてあり、ターミナルソフトのck.exeでUTF-8を表示できるのですが、 cygwin上でwin32のautotest使うと、テストが再実行しようとCtrl+Cを押すと何故かされず、即終了してしまうんですよね。 最近は、coLinuxのUbuntuを入れて、かなり普通にあたりまえに動くしUTF-8も問題ないので、それでもいいか、という気がしています…。
135 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 12:19:05 ] cygwinのttyはWindowsのコンソールとは見なされないからね。 それはもうcygwinとmswin32を組み合わせるのが悪いとしか言いようがない。
136 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:05:18 ] 拡張モジュールの中で struct FRAME や struct RNode を触りたいんですけど、ruby.hには含まれていなくて困っています。 今はnode.cから extern strct RNode { ... }; を自分のソースにコピーしていますが、 もっといい方法があると思うので、ぜひ教えてください。
137 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:42:49 ] rbbrのツリーってタブおしたら落ちない?再現率100%なんだけど
138 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 16:56:22 ] >>136 node.cって何? 1.8ならenv.h、node.hが普通にあるはず。 1.9なら方法はないので諦めてください。
139 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 19:18:40 ] 拡張ライブラリのソースを ext/foo/foo.c に置いたら、extconf.rb も同じ場所に置かないといけない? それともextやREADMEと同じ場所においておくもの?
140 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 19:21:51 ] gem なら Rakefile に gem.extensions = 'ext/extconf.rb' とか直接書く
141 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 20:42:02 ] >>139 基本的には同じところに置かないといけない。 別のところにも置くことはできるけど、それを聞いてくるということは、説明してもしかたなさそう。
142 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:54:07 ] >>136 何のために? 99%方針が間違ってる。
143 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 17:06:54 ] htmlファイルの読み込みについてなんですが、 マッチングでマッチした文字列以降を表示させるにはどうすればいいですか?
144 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 17:13:22 ] HTML あんま関係ないな 簡単なのは「キーとなる文字列の直後から必要な別のキーの直前まで」をマッチさせること $1 とか $2 とかの正規表現の勉強をするといい # <title></title>で囲まれた文字列 /<title.+?>(.+?)<\/title>/i =~ html puts $1
145 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 17:14:47 ] >>143 コードを書いて実行すればいいよ
146 名前:143 mailto:sage [2009/10/29(木) 17:26:50 ] >>144-145 あざっす!!
147 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 18:17:28 ] フォームから入力されたユーザー名とパスワードで Kerberos認証をしたいのですが何か方法はありますでしょうか? (ApacheのBasic認証にKerberosを利用するのではなく、 Rubyで作成したCGIの任意の箇所で認証処理をしたいです。) ライブラリ等あればいいのですが…。 Kerberos認証を行うシェルを作成して、 CGIからユーザー名とパスワードを渡して実行させるしかないですかね?
148 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:26:46 ] >>143 $'
149 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 21:34:35 ] >>147 使ったことないけど、rubyforge.org/projects/krb5-auth/ とかかな。
150 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:12:29 ] 質問 Time#to_i の秒数って、時差というかタイムゾーンとかどうなってますか?
151 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 11:07:10 ] そのオブジェクトが地方時か協定世界時かにかかわりなく、 to_iが返すのはUnixタイム。
152 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 11:11:15 ] あのへんは UTC とはなんぞやということを外部で習ってるということ前提だからな Ruby で初めて意識したという人にとってはやや不親切だ
153 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 11:19:13 ] to_i で整数にして計算して at で戻すと一瞬わけわからんことに
154 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 04:36:09 ] 教祖がデビアン住人だしな。世界の外の事は知らない。
155 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 07:35:31 ] >>154 どういう意味?
156 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 10:27:39 ] 教祖とか宗教とかモルモンとかそういう単語の入ったレスは読み飛ばしてOK NGにしておいても一向に損をしないことを保証する
157 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 16:53:54 ] Pentium4(HT)のWindowsXP環境で CPUを100%使い切って計算しようとおもったら、マルチスレッド対応にしないとだめかな? タスクマネージャーみたら、なんかCPUに余力が有るみたいなんだが・・・
158 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 17:05:46 ] 複数プロセス同時に動かすのは?
159 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 21:12:16 ] >>157 HTは、1コアを2コアに見せかける技術だから、1コアをもし使いきっているなら、 タスクマネージャでどう表示されようが、100パーセント使い切ることになるように思うけど、どうだろう。 ファイルやネットワークの入出力がある場合は100パーセントになりにくいけど、 非同期I/Oを使って頑張れば100になるんじゃないかなー。 最近のCPUは2コアが普通だから、158のように複数プロセス起動しないとだめだろうね。
160 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 23:49:32 ] そんなことまで考えてプログラミングしてるのか すごいなお前ら
161 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 00:06:26 ] "begin a,b,a,a,b end" のような、中身が繰り返しているような文字列のマッチはどんなふうにするのがいいでしょうか? /begin ((a|b),)*(a|b) end/ とすればできましたが、2回同じこと(a|b)を書いているのがちょっと気になります あと、できれば繰り返しの部分を$1,$2,$3・・・のようにあとで取得したいのですが、可能でしょうか?
162 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 04:12:38 ] >>161 >2回同じこと(a|b)を書いているのがちょっと気になります 正規表現なら我慢して書くしかないように思う。 >繰り返しの部分を$1,$2,$3・・・のようにあとで取得したい マッチする個数がわからないと難しい。 /begin ((a|b)(,(a|b))*) end/ として、 $1.split(/,/) とするぐらいか? あと (a|b) は、もしほんとにaとbを使うだけなら[ab]のほうがいい。 /begin ([ab](,[ab])*) end/
163 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 08:00:11 ] ここはRubyスレなので、Rubyの正規表現なら、という話なら、 (?<名前>任意の表現) と \g<名前> の組み合わせでできる。 /begin ((?foo<(a|b)>),)*\g<foo> end/
164 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 08:06:53 ] Rubyの正規表現と称して>>163 がOniguruma実装限定の正規表現持ち出してきたのが笑える
165 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 08:23:44 ] begin 〜 end だけ抽出しておいてそれに (a|b) の scan かけるんじゃだめなん
166 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 10:51:59 ] >>164 1.9ならOnigurumaが標準だろ
167 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 10:55:27 ] そんな寝言は1.8.7を撲滅してからほざくがよいぞ それまでは両バージョン用併記か注釈で対応バージョン明記
168 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 10:58:37 ] スレとしては 1.8.7 が推奨バージョンなんだから、 1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな
169 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:04:48 ] 普段く1.9の質問したら、氏ね、1.8使えと煽るくせに、 正規表現は1.9で書き込むとか、 ここの住人はダブルスタンダードだな、おい
170 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:24:05 ] 1.9でレスしてもいいんだがそうと明記すべきだぬ
171 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:24:40 ] いつの話だよ さすがに今1.9を使うなって奴はいないだろ
172 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:28:12 ] >>169 だって君の言う「ここの住人」って、一人しか居ないわけでもなければ、 まったく同じ考え方をする集団ってわけでもないもの。 ダブルスタンダード認定は、前者と後者が同じ人間によって書き込まれたことを 確認してからでないと。
173 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:32:48 ] 初心者が使用すべきものと熟練者が使用して便利なものとは違うということをいまさら講釈しないといかんのか
174 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:05:25 ] 1.9はsp2出るまで町だな。
175 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 16:27:06 ] 1.9.3のこと?
176 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:33:30 ] 2.0マダー
177 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 17:39:55 ] >>171 います
178 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 21:01:12 ] >>168 >1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな だな。1.8.7からの新機能の場合もその旨書いておいてほしいよね。 今度から>>1 に追加しといてもらおう。 >>171 >いつの話だよ >さすがに今1.9を使うなって奴はいないだろ おまえはまず>>1 を声だして100回読め
179 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 21:27:12 ] >>158-159 繰り返しの計算処理なんだわ 具体的には、ニューラルネットの実装やってる はんぱない回数の計算が学習には必要なんだけど 1プロセスだと、スレッド分けしても、複数CPUは使ってくれないってことかな? だとすると、プロセス間通信とかを眼中にいれて設計しないとダメってことかな? ってことは、向かうところはdRubyあたり?
180 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 01:06:18 ] ほう、膨大な計算量を必要とする分野にも進出してるんだなあ
181 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 03:07:06 ] >>180 実用とか研究とかじゃなくて趣味だけどね。 Rubyでやってもいいんじゃない?ってかんじで
182 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 06:53:38 ] Rubyの入門書では、サンプルプログラムの出力を大抵以下のように書いてます。 puts 'Hello World!' ですがたまに以下のように書き方も見かけます。 $stdout.puts 'Hello World!' どっちも正しいと思いますが行儀の良い書き方という意味では後者になるのですか?
183 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 07:07:13 ] 意味不明。内部でやってることは同じだし後者には何のメリットも無い。
184 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 07:16:11 ] printf("Hello World\n");と fprintf(stdout,"Hello World\n");の違いみたいなもんだぞ 簡略できるようにしてあるのにあえて冗長に書く必要はないと思う
185 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 07:48:49 ] 冗長に書く意味があることはありうる が、これに限ってはまず無いだろうな 前者の関数的メソッド puts の出力先を捻じ曲げるためには $stdout をいじるしかないわけだが それをすると後者の $stdout.puts も捻じ曲がるんで意味がない Ruby における 関数的メソッド puts と $stdout は不可分だ(C の puts を知ってると引っかかるかも) もしなんらかの気の迷いで関数的メソッド puts の出力先の $stdout が標準出力以外になってるなら それは putserr とか putsfile とかなんかメソッドを新たに作るべき むしろ後者を書かれるとがっかりだ むしろそのサイトなり解説書なり晒せ