- 1 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:26:33 ]
- プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.6 の使用を強くお勧めします】 関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 213 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 02:51:19 ]
- ttp://doc.loveruby.net/refm/api/view/method/Kernel/m/set_trace_func
- 214 名前:212 mailto:sage [2008/04/22(火) 03:04:54 ]
- >>213
こんな機能があったんですね ありがとうございました
- 215 名前:デフォルトの名無しさん [2008/04/22(火) 03:21:12 ]
- RubyWay読んでたら、Stringのeachは1.9ではなくなり、
each_lineを使うようになったと書いてありました。 今書いてるスクリプトには、ファイルからの読み込み処理等で eachが結構あります。 これは書き換えないと1.9以降では動かなくなるのでしょうか?
- 216 名前:デフォルトの名無しさん [2008/04/22(火) 06:46:11 ]
- ハッシュの存在しないキーを参照してもnilが返ってくるだけでノーエラーですが
多次元配列で存在しないキーを参照すると undefined method `[]' for nil になります 存在しなかったとしてもエラーが出ないように参照する方法を 教えて下さい
- 217 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 07:11:08 ]
- def nil.[](i)
nil end
- 218 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 07:42:47 ]
- ハッシュのデフォルト値を[]にするとか
- 219 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 08:03:40 ]
- あ、スマンぼけてた。問題は配列のほうか。
- 220 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 08:16:16 ]
- 多重ハッシュでも存在しないキー指定したら
undefined method `[]' for nil になるじゃん 何をしたいか明確に書けよヴォケ
- 221 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 10:20:15 ]
- >>216
配列じゃなくてハッシュを使う
- 222 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 11:25:06 ]
- 多次元配列などというものはRubyには存在しません
- 223 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 13:57:40 ]
- class TajigenHairetsu << Hash
def [](*arg) super(arg) end def []=(*arg) super(arg[1,-1], arg.last) end
- 224 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:41:56 ]
- rubyのコマンドからファイルの有無を確認する方法は無いでしょうか?
無ければ指定したテキストファイルを作り あれば追記するような仕組みを持ちたいので
- 225 名前:216 mailto:sage [2008/04/22(火) 17:50:19 ]
- 217さんの方法でしのぐことにしました
ありがとうございました >>220 ハッシュか配列かではなく nilに[]が使えないことをどうしようかという話でした
- 226 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:17:46 ]
- >>224
ファイルのことについてどうこうしたいんだからFileクラスのメソッド探してみれ
- 227 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 19:31:56 ]
- だからfetch(i,default)を使えと
- 228 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 20:24:49 ]
- 問答無用に'a'でopenすればええんとちゃうの?
- 229 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:04:12 ]
- >>228
のぞんでいたどうさができました おそらく不具合の原因は参考にしていたサイトがafile=File.new(*****) とnewを使っていたためのようです 今まで5個ほど言語を学んできましたがrubyほどシンプルで強力な言語は 無いと感じました 本当にありがとうございます!
- 230 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:28:45 ]
- >>215
動かなくなるよ。 str.each は、str.scan(/^/).each に置き換えよう。
- 231 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:42:21 ]
- IO#eachは残ってるんじゃなかったっけ?
- 232 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:15:01 ]
- class String
unless method_defined?(:lines) def lines self end end end としておいて、1.8系でもstr.lines.eachと書いておくという手も…
- 233 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:06:52 ]
- irb > print "test"
この結果が ttt => nil と出るんですが、これはどういう意味なんですか? irb => ttt と出力されることを期待したのですが。
- 234 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:09:48 ]
- tttはtestのつもり?
irbの=>の後ろに出るのは、入力した式(print "test")を評価した値。 x= print "test" とすると x = nil になるのといっしょ。 testという文字列が書き出されるのは式の評価(値を求めること)の、まぁ副作用だ。
- 235 名前:233 mailto:sage [2008/04/22(火) 23:38:04 ]
- >>234
おぉ丁寧にありがとうございます。 入力コマンドを単純に実行するのではなく評価するだけなんですね。 てか使い道あるんでしょうかね…?
- 236 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:34:45 ]
- ないよ
- 237 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:37:12 ]
- irb > print "test"
この結果が ttt => nil ^^^~~~~~~ ^:printの出力 ~:irbが返り値のインスペクションを出力 コマンドって…
- 238 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:43:07 ]
- ttt => String
にはならんの?
- 239 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:51:04 ]
- たぶん出力の意味を勘違いしてるよ。
irbは「=> 返り値」を印字してるだけ。 その前のprintの出力に改行がないからそんな見た目なだけ。 もしそんな出力がされるってことは、printがStringクラスを返してるというイミフなことになるぞ。
- 240 名前:デフォルトの名無しさん [2008/04/23(水) 06:24:22 ]
- RubyのIDEでおすすめは何ですか?
今はNetBeansを使っていますが、他のファイルのクラス等が 自動補完できないのでもう少し高機能なのが欲しいと思っています
- 241 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:33:10 ]
- おすすめは無い
あと1年くらいしたら便利なの出てくるぜと3年くらい前から言われてる
- 242 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:46:14 ]
- rubyらしいな
- 243 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 14:09:47 ]
- pythonから移ってきた人向けの入門ページとかないですか?
- 244 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:31:57 ]
- for文について質問です。
for book in book_array end このように配列を回すfor文の中でインデックスを取得することは出来ないのでしょうか?
- 245 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:33:59 ]
- Enumerable#each_with_index
- 246 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:53:58 ]
- >>245
ありがとうございます!できました。 java出身だとfor文でインデックス取れないって変な感じですね。
- 247 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:15:35 ]
- 数値計算関係はpython
日本語処理はruby という使い分けしようと思っててるんですが、うまくミックスする方法はないのでしょうか?
- 248 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:39:13 ]
- 質問が曖昧すぎて意味不明
- 249 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:40:43 ]
- >>246
for i in (0..book_array.size) p i, book_array[i] end カウンタ変数もなしにインデックスが取れるわけないだろう
- 250 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 20:37:16 ]
- >>249
× .. ○ ...
- 251 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:54:00 ]
- 上と下ならどっちがrubyらしいですか?
if foo == "" end if foo.is_a? String && foo.empty? end
- 252 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:07:13 ]
- オブジェクトの型をチェックするコードは常用するものではない。
- 253 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:04:56 ]
- >>247
全部Python
- 254 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:13:04 ]
- てかRubyの日本語処理ってNKFべっただし
PythonからRuby向けを切り出す必要があるとは思えない Pythonで書けるなら全部Pythonで書くのがベスト
- 255 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:18:41 ]
- rubyで簡単なツールを作ろうと考えております
GUIを組むにはruby/tkとか色々種類があるようなのですが、 最もメジャーなのはどれでしょうか? ツールの詳細としては、チェックボックスやリストで設定項目を設定し、 それによるシミュレーション結果をメッセージボックスに文字列で 順次吐き出すだけというものです ※一応Javaも少しかじってます もし「rubyのGUIは終わってるからJavaでやれ」とかならば それはそれで結論として構いません
- 256 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:28:07 ]
- 際だって使われているGUIツールキットはないと思うが、tkは最初から
付いてくるから比較的メジャーと思われる。 自分はマカーなので、必要な場合はOSに付いてくるRubyCocoaを使う ことになると思うけど。 Javaもかじってる人ならJRubyでSwing使うというのもアリかね。
- 257 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:31:29 ]
- >>255
FXRuby
- 258 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:35:52 ]
- railsでいいじゃん
- 259 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:38:22 ]
- >>255
ttp://www.gesource.jp/programming/ruby/gui/index.html おいらはApollo派
- 260 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:41:57 ]
- 配布するのか、自分の特定のマシンで使うのかにもよるよな
- 261 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:00:03 ]
- 漏れはRuby/Gtk2
Gnomeだからそれに合わせて。Gladeとかあって使い勝手も悪くない。
- 262 名前:255 mailto:sage [2008/04/24(木) 01:07:39 ]
- >>260
一応は仕事で補助的に使うツールです 基本は自分のPCで動けばOKですが 状況によっては周囲に配らないとも言いきれませんので 配布時のパッケージングに優れていると助かりますね
- 263 名前:255 mailto:sage [2008/04/24(木) 01:09:43 ]
- あと、OSはWindowsXPです
今更言う事でもありませんが、念の為…
- 264 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:12:18 ]
- >>255
wxRubyかFXRubyの2択だな
- 265 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:15:49 ]
- VisualuRubyはダメなのかな?
exerbでexe化もできるみたいだし。 てか、ほんと「これだ!」ってのはないと思う。
- 266 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:48:06 ]
- 俺AvtiveRubyとHTA
- 267 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:24:49 ]
- HTA+ActiveScriptRubyなんて組み合わせ知ったときには
これぞ俺が今まで追い求めていたものだと直感した GUIはHTMLで記述、中身の処理はRuby。夢のようだ なのになんで使わなくなったんだっけ俺
- 268 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:01:03 ]
- インターフェイスはrubyになるけど中身はIEのままじゃねそれ
eachとかProcとかないんじゃ
- 269 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 14:45:06 ]
- >>247
>>254 xmlrpcやjsonでお互いのプログラム間で通信したらいいのかな?
- 270 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 17:24:55 ]
- >>255
反則っぽいけどwebrickでアプリケーションサーバを作るとか guiとかの環境依存性も配布する必要も無い ついでにdrbで分散処理も追加
- 271 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 00:47:28 ]
- >>255
>262,263の条件ならC#かJavaがいいと思う。 UNIX系でも使う可能性があるなら>264かな。
- 272 名前:255 mailto:sage [2008/04/25(金) 02:51:02 ]
- 色々候補ありましたが、日本語周りに確証が欲しかったので
差し当たりVisualuRuby触ってみる事にします 皆様レス有難うございました しかし決め手が無くて色んな種類があるという状態は 選択肢が広いとは言え、個人的には苦手だ…
- 273 名前:デフォルトの名無しさん [2008/04/25(金) 04:29:00 ]
- パスが入ってる文字列のファイルセパレーター(/や\)を,
/からwindowsの\に変換するメソッドは有りますか?
- 274 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 05:51:48 ]
- >>273
文字の置き換えだろ? リファレンスマニュアルでStringの項を読みなさい
- 275 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:54:28 ]
- 文字列の50行目から100行目の範囲に対して、正規表現で検索をしたいのですが
今は str.split('\n).each do |line| cnt += 1 line =~ 〜 if(50<=cnt && cnt<=100) end のようにしているのですが、strはかなり長い文字列なので、無駄な処理をしている気がします もっと上手は方法はないでしょうか?
- 276 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 00:22:53 ]
- >>275
とりあえず、splitする必要ないでしょ
- 277 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 00:31:59 ]
- >>275
ややトリッキーな方法だが target_lines = str.split($/).slice(50..100) if target_lines then target_lines.each do |line| line =~ 〜 end end
- 278 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 00:39:05 ]
- >>276-277
ありがとうございます
- 279 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:18:49 ]
- >>275
str.each_with_index do |line, cnt| next if cnt < 49 line =~ 〜 break if cnt >= 99 end 1.9なら str.each_line.with_index
- 280 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:32:56 ]
- next unless (50..100) === cnt
- 281 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:00:36 ]
- 何を無駄って考えてるかによりそう
strが巨大な配列になってるのがヤだっていうならsplitとeachは全滅だな
- 282 名前:デフォルトの名無しさん [2008/04/26(土) 13:58:48 ]
- Rubyからコマンドを実行させるには、execとかsystemとかいろいろあると
思うんですけど、出力結果を文字列として取得する場合はどうすればいいんですか? ちなみにRuby1.8.6です。
- 283 名前:282 [2008/04/26(土) 14:01:07 ]
- 282です。
できればエラーストリームだけとれるのが望ましいです。
- 284 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:13:05 ]
- kazuho.exblog.jp/1883201/
>日本のオープンソース開発者の中で有名なまつもと氏のような方ですらライセンス条件について間違った解釈をしてしまうのである ほうほう。
- 285 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:49:08 ]
- わざわざ自分のブログ宣伝して回るなよ
- 286 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 16:24:59 ]
- >>282
* Open3 を使う(require 'open3') * 自分で作る(open3 は簡単だから、読んでみるといい) * windowsでは動かないかもしれないが↓ command = 'ls /tmp' stderr = `#{command} 2>&1 > /dev/null`
- 287 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 22:55:11 ]
- >>282
$stdout, $stderr を reopen して system system のいいとこは shell を介さずに実行できるから コマンドインジェクションを防げる。
- 288 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 01:40:40 ]
- 単純にpopenじゃあかんの?
- 289 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:50:28 ]
- ポペン!
- 290 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:19:04 ]
- あのさ、あるクラス Foo があって、その機能強化版をつくったとき、
クラス名は何にしたらいいと思う? AdvancedFoo とか ExtendedFoo とか考えたけど、あまりいい名前じゃないといわれた。 かといって、雑多な機能をいくつも付け加えたから、これといって名前をつけにくいんだよな。 なんかいい名前ない?
- 291 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:26:58 ]
- 追加する機能をモジュールとして作り、
Fooのインスタンスにextendで機能追加する。 ↑という方法では解決できず、どうしても継承でやる必要があるなら FooWith機能名 とか 機能ableFoo とか。
- 292 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:30:36 ]
- Fooそれ自体に機能(メソッド)を追加するという方法もある。
あるいはモジュールとして作り、includeする。 Fooのインスタンスはどれでも追加された機能を使える。 class Foo ... # 元の定義 end # 定義を再オープンして機能追加 class Foo def 追加機能 end ... end >>291のextendする方法は、Fooクラスのインスタンス全体ではなく、 Fooの特定のインスタンスだけに機能を追加する方法。
- 293 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:32:40 ]
- クラスに二つ以上の責任があるんじゃないか?
できれば分割して名前を明示できるようにした方がいい
- 294 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:46:16 ]
- >>291,292
もとのFooは残す方向なので(ほかに継承で使っている人がいるから)、Foo自体を拡張するわけにはいかないんです >>293 まあそうなんですけど、Rubyの大クラス主義でやっているので。 大クラス主義はたしかに便利なんだよね。既存の他のクラスのインターフェース変えなくていいし。
- 295 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:19:07 ]
- >>294
大クラス主義はキッチンシンクじゃないぞ。 >>290 > かといって、雑多な機能をいくつも付け加えたから、これといって名前をつけにくいんだよな。 どうも行き辺りばったりの感じがするんだが。 UtilFooとでもしとけば。
- 296 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:45:31 ]
- Rmagickで書き込もうとする、もしくは書き込んだ文字列の幅と高さを求めるにはどうすれば用でしょうか?
- 297 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 21:48:45 ]
- >>296
ImageMagickのコマンドから推測するといい
- 298 名前:デフォルトの名無しさん [2008/04/28(月) 19:42:33 ]
- Rubyの利点って何?
Javaプログラマの俺にわかりやすく説明して
- 299 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:55:52 ]
- 状況も設定せずに利点を挙げろつってもなぁ。
まずは自分の疑問をわかりやすく説明しる。
- 300 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:02:49 ]
- 適当な捨てプロ書くのに凄く楽。
- 301 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:09:52 ]
- >>298
君にとって利点はないと思うよ
- 302 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:37:12 ]
- 気楽に楽しくプログラミングできる
- 303 名前:デフォルトの名無しさん [2008/04/28(月) 20:37:35 ]
- >>301
その返し方は誤解を与えるかもな。 ほとんどの人にとって利点はないと答えたかったんだろ?
- 304 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 21:00:15 ]
- >>300
それあるなぁ。 ワンライナーも併せて便利
- 305 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 21:10:58 ]
- >>303 一人で納得してれば
- 306 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 21:51:50 ]
- rubyで大枠の処理を書いて、細かいところはJavaを呼び出す
- 307 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:09:01 ]
- JRubyでうんたらかんたらできる。
初期起動がかなり遅いけど。
- 308 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:36:39 ]
- Rubyの利点って何って話だけど、
それよりむしろJRubyの利点が知りたい。
- 309 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:38:33 ]
- JRubyの利点ってJavaのクラスが呼び出せるとかじゃないのかな。
これができると膨大なJavaのライブラリも使えるし。 個人的にはSwingあたりのGUIライブラリが楽に使えるとありがたい。
- 310 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:40:57 ]
- 大量にあるJavaの資産が使えるのがありがたい
標準のライブラリだけで大抵のものが一揃いして、もちろん完成度も高め。Swingもあるし
- 311 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:47:59 ]
- >>309
>>310 へー、そうなんだ! JAVA屋さんには便利なのかな そういえばIronRubyはどうなったんだろう
- 312 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:55:35 ]
- >>308
(顧客の)サーバにRubyのバイナリを入れるのは(政治的な意味で)非常に大変だが、 Javaはデフォで入ってるので、jarを1個放り込めばよいJRubyは非常にありがたい。
- 313 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:12:25 ]
- >>312
その発想はなかった! 業務で使ってる人は大変なのね
|

|