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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
42 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:28:39 ] p @hoge と @hoge=nil p @hoge が状態が違うというのはあまり好きではない オブジェクトに関連付けられていないインスタンス変数はローカル変数同様にエラーを返すほうがよかった気がする
43 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:42:50 ] >>26-27 ありがとう。 なるほど、receiverはself固定なのね やっぱ代わりにはならないか Kernel.method(:puts)が書きずらいなーと思ったので、 :Kernel.puts.to_proc ってまあ、無理かw
44 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:45:18 ] >>28 じゃないけど、職場でLAMPって言葉使ったら、m9(^Д^)プギャー!!されてしまった。 そんな言葉、聞いたことないよ、と 用語説明しても、それは単にソフトウェアの構成のことであって、うんぬん
45 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:51:15 ] Wintelみたいなもんだろ?>LAMP 言葉は知ってても使わない、っていう人も多いだろうし、知らない人は知らないし。 言葉だけではとくに m9(^Д^)プギャー!! されるもんでもなかろう 使い方じゃね?
46 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:51:38 ] >>42 いきなり if @name.nil? then @name = '上戸彩' end とかできないのか 全部initializeで初期化するべきだな
47 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:56:07 ] >>46 こういうときって defined? と nil? 両方でみるべきなのかね if defined?(@name) || @name.nil? @name = "mage" end いや、やっぱinitializeでnil初期化がらくだ
48 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:58:14 ] attr_accessor に、全部nilで初期化ってくらいのオプションがついててもいいと思うんだ。 どうせsyntax sugarなんだから。
49 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:59:37 ] >>44 知らない奴が知ってる奴に「m9(^Д^)プギャー!!」するのは何かおかしいだろう。 まあ知ってるからどうだという言葉ではあるが。
50 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:17:46 ] >>46 @name ||= '上戸彩' >>42 は = で代入が行われてないインスタンス変数は instance_variables に登録されないとかなんかその辺の話だろう どちらも nil を返すが後者はインスタンス変数が存在していると
51 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:08:33 ] >>50 なんでだよw @is_man = false @is_man ||= true p @is_man => true 「||=」と「if xxx.nil?」は違う
52 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:13:06 ] >>51 50じゃないけど慣用句的に使ってたよ('A`) nilじゃないときは代入、みたいに
53 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:16:03 ] falseが入ってこないという仕様ならいいと思う ただ完全な置き換えではないということは知っておかないと、 リファクタリングのときとか微妙に挙動を変えることになるかもね。 微妙なのがわかりづらい。あからさまなのはわかりやすい。
54 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:23:51 ] FlaseClass のオブジェクトがどこからともなく入ることはそもそもありえないだろ
55 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:41:12 ] Flase 落ち着け つ旦~
56 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:53:44 ] >>54 みたいに間違いを指摘されると意固地になるやつって面倒なんだよな 指摘しないと仕事にならないときとか困る やんわり言ってもやんわり意固地になるし・・・どーすりゃいいのよ
57 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:35:31 ] >>56 >>46 が @name == false をチェックしてないということ自体が答だろ false はこの場合「入るはずがない」のが前提 nil? メソッドを defined? でチェックしてないのと同じ
58 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:50:59 ] もしfalseが入ってるなら上書きしちゃまずくないか? という流れじゃないのか?おれの勘違いだったらスマン
59 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:01:17 ] false の時は動作しないだろ、という突っ込みが文脈上無意味またはオタ臭い重箱隅つつき、というようなアリガチな話だと思った
60 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:05:14 ] >>46 できる。未定義のインスタンス変数を参照するとnilが返るから。 でもって>>50 が @ivar ||= val という書き方を提案した。 これは @var = val unless @ivar みたいなもんなので >>51 が@varがfalseでも上書きしちゃうぞ、と突っ込んだ
61 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:10:23 ] DBのブール型を普通に使ってるおれは興味深かったが、 true/falseを変数に入れるって使わないやつは使わんのかね。
62 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:14:19 ] >>60 >>42 をよく嫁よ オブジェクトに関連付けられていないインスタンス変数はローカル変数同様にエラーを返すほうがよかった気がする
63 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:47:54 ] >>46 からの流れだよ。 >>42 の意見はどーでもよかったから省いた。 そんな仕様だったら死ぬ。
64 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:56:18 ] >>40 なにが(笑)なのかkwsk
65 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 00:20:16 ] 普段pythonを使ってるのですが rubyとの対応表みたいなのがあるサイトはないでしょうか rubyを手間かけないで覚えたいのです
66 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:08:47 ] >>65 pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8%B8%C0%B8%EC%A4%CE%C8%E6%B3%D3
67 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:16:07 ] あ
68 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:44:13 ] Hikiって文書の中にRubyのスクリプト埋め込んだりできないの?
69 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 23:04:56 ] Wikiの文書にサーバーで動作可能なスクリプトを埋め込めるとか怖過ぎるだろ…
70 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 23:06:19 ] Hiki公開しちゃダメ
71 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:39:49 ] asobi.sqweebs.com/cdxidyfk/sphvpisz.php 質問用テンプレ作りました。
72 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:48:03 ] テンプレ作ってくれて助かるが、webサービスにする必要あるのか?ww
73 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:49:12 ] >>71-72 せっかくなのでテンプレコピペ(ちょい修正) ◆質問用テンプレ 【詳しい内容(「動きません」「うまくできません」だけでは回答しにくい)】 【エラーメッセージ(自力で訳さずなるべくそのままで)】 【実行環境(OS名、Rubyのバージョン(ruby -v しる)】 【最終的にやりたいこと(もっとよい方法がある場合が多いため)】
74 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:16:28 ] >>71 乙、しかし Rubyで作れw
75 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:24:31 ] ランダムディレクトリ名でランダムファイルのCGIはアクセス解析とスパイウェア注入と相場が決まってる アクセスしたお前らオタワ\(^o^)/
76 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:38:13 ] Rubyスレに貼られるPHPのCGIなんざ俺が踏むわけねーだろ
77 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:44:32 ] 外部コマンドを一定時間実行して実行を打ち切るのってどうすればいいですか? なんとかBSDでのTS抜き環境が出来てddコマンドでUSBデバイスからコピーすればデータが流れてくるようになりました。 停止しなければ延々放送波が流れてくるので、CTRL+Cで停止する必要があるのですが、 rubyでラッパーを書いて利用する際にどうすれば時間指定を出来るのかと思った次第です。
78 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:50:00 ] Rubyあんま関係ないな システムコールとか勉強するといいぞ 時間指定は cron とかの外部スケジューラに任せるのが一般には間違いない
79 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:00:22 ] さっぱり分からんがスレッド使って時間をみたりするのはダメなのか?
80 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:22:59 ] 子供を1時間動かしておいて、30秒だけしか待ってやらない親 require 'timeout' pid = fork if pid begin timeout(30) do puts "waiting #{pid}" sleep end rescue Timeout::Error Process::kill('KILL', pid) ensure Process.wait end else exec("sh -c 'sleep 3600'") end
81 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:28:09 ] >>79 個々のスクリプトとしては sleep するしかないので、正直あんまりよくはない 自分の見てる前で30分だけ動かすとかそういうのならいいけどさ
82 名前:デフォルトの名無しさん [2009/04/05(日) 21:04:00 ] OpenStructクラスで、[]、[]=、count(from Enumerable)などのメソッドを使いたいのに 定義されていない場合は、OpenStructを継承して派生クラスで定義してくれってことですか?
83 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:47:41 ] >>77 pid=fork if pid==nil then exec('やりたいコマンド') else sleep 動かしたい時間 # まずはSIGINTで止めてみる Process.kill(pid,'INT') stat=Process.waitpid(pid,Process::WNOHANG) if stat==nil then # ダメなのでSIGTERMで Process.kill(pid,'TERM') stat=Process.waitpid(pid,Process::WNOHANG) if stat==nil then # これもダメだったのでSIGKILLで。これなら確実に終了できる Process.kill(pid,'KILL') stat=Process.waitpid(pid) end end end 確かforkは失敗すると例外を投げるはず
84 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:48:40 ] >>82 他にどーしろと… st[0] でも st[:hoge] でも st.hoge でも st.each でもアクセス可能なコレクションというのは デフォルトでは添付されてない どれか諦めてくれ
85 名前:77 mailto:sage [2009/04/05(日) 22:44:07 ] >>80 >>83 有り難うございます 別のプロセスをforkで作り、子供側にはnilを返し親にはpidを返すので 下に分岐を入れて子供には外部コマンド実行、親にはスリープしたのちkillさせる、ってことですね。 確かにrubyはあんまり関係ない処理だなあ・・・。unixの勉強がいるなあ。
86 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:45:57 ] >>83 pid = fork {exec('...')} とブロックのほうがいいんじゃまいか 1.9ならspawnがあるんだが。
87 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 22:51:45 ] それから、シグナル送ってからちょっとくらい待ってやれよ。 以下、Bourne Shell版。 #!/bin/sh やりたいコマンド & pid=$! sleep 動かしたい時間 kill -INT $pid 2>/dev/null && { sleep 1; kill -TERM $pid 2>/dev/null; } && { sleep 1; kill -KILL $pid 2>/dev/null; } wait
88 名前:デフォルトの名無しさん [2009/04/06(月) 01:21:04 ] クラス名を文字列で受け取ってnewしたいとき、どのようなコードになりますか。 いろいろ試してみたけど最終的にはシンプルにevalしか思い当たらないんですが、漠然と他にありそうなような。 classname = "SomeClass" require classname #ファイル名とクラス名が同じと仮定した場合 obj = eval("#{classname}.new")
89 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 02:36:15 ] >>88 classnameが::を含まない前提? > require classname #ファイル名とクラス名が同じと仮定した場合 普通は require classname.downcase > obj = eval("#{classname}.new") obj = Object.const_get(classname).new のほうが速い active_supportあたりにそんな機能があるよ、確か。
90 名前:88 mailto:sage [2009/04/06(月) 06:20:11 ] >>89 ありがとうございます! >>88 の例では明示的にrequireしていますが、実際にはオートロードするように書いていたため evalしかダメでした。(evalした時点で暗黙に読み込まれる) const_getだと、すでに読み込まれている定数に対してですが、 そのことに気づかずにあれやこれやと・・・orz 現在は修正してうまくいっています。 active_supportは使えない環境なんですが、ファイル名のことなども参考になりましたm(_ _)m
91 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 10:55:14 ] >>90 > >>88 の例では明示的にrequireしていますが、実際にはオートロードするように書いていたため > evalしかダメでした。(evalした時点で暗黙に読み込まれる) > const_getだと、すでに読み込まれている定数に対してですが、 > そのことに気づかずにあれやこれやと・・・orz > 現在は修正してうまくいっています。 バージョンとエラーメッセージは? $ echo 'class C; end' > c.rb $ /usr/bin/ruby -ve 'autoload :C, "c"; p Object.const_get(:C); p $"' ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] C ["c.rb"]
92 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:37:54 ] Rubyプログラミング入門 ?はじめてのプログラミング、はじめてのRuby ttp://www.bnn.co.jp/books/title_index/web/ruby_ruby.html サンプルコードを読む限りはまー最初ならこんなもんじゃねーの、と思った 少なくとも同時期のナントカの冒険よりは読む価値があると思う サンプルコードのダウンロードURLが書いてあったんだけど まさかサイトに書いてない購入者限定の代物だとは思わなかったので記憶してくるの忘れた サンプルコード公開すれば売上伸びる系統の本だと思うのに
93 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:10:52 ] Rubyの冒険とかめちゃくちゃ懐かしいんだが それとは関係ないんだな
94 名前:90 mailto:sage [2009/04/06(月) 20:43:51 ] >>91 いただいたコードを見ると、const_getでautoloadしないわけではなかったのですね。 今一度自分のコードを見直してみたところ、const_getでautoloadできました。(解決!) 最初、Javaのように文字列からクラスを生成する書き方ばかり想像していて >>88 で説明のための適当なコードを載せたばかりに、余計な手間をおかけしました。 いまさらですができているコードを書いておきます。 #testfactory.rb module TestFactory #モジュール内のメソッドは公開済み autoload :TestClass1, "testclass1.rb" autoload :TestClass2, "testclass2.rb" def get_instance(classname, *args) #インスタンスを返す # eval("#{classname}.new(*args)) #>>88 の時点のコード # require classname.downcase #>>90 の時点のコード(レシーバ違いでrequireが必要だった) # Method.const_get(classname).new(*args) #requireしないと=> uninitialized constant Method::TestClass1 self.const_get(classname).new(*args) #現在のコード(問題なし) end #その他の同種のメソッド def get_class(classname); self.const_get(classname); end #クラスを返す def method_missing(classname, *args); self.const_get(classname).new(*args); end #同じくインスタンスを返す end
95 名前:90(続き) mailto:sage [2009/04/06(月) 20:45:03 ] #test.rb require "testfactory" #ファクトリモジュールを読み込み classname = get_classname #あるメソッドによりクラス名(文字列)を決定 obj = TestFactory::get_instance(classname, arg1) #OK! Rubyのバージョンは以下のとおりです ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] ありがとうございました!
96 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:15:58 ] ruby:1.8.7 rails:2.1.0 でやってるんだけどto_dateって使えないの? ググったら1.8.6だとprivateメソッドで定義されて〜 とか書いてたけどto_datetimeやto_timeとかもundefind methodになる…
97 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:19:21 ] >>96 Railsのライブラリで定義されてるメソッドの話はスレ違い 【Ruby】Ruby on Rails Part6 pc11.2ch.net/test/read.cgi/php/1224838013/
98 名前:96 mailto:sage [2009/04/06(月) 21:24:10 ] >>申し訳。 そっちで聞いてみます。
99 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:27:17 ] スレ的にはRailsをRuby初学者が使うのは全くお勧めしない
100 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:46:32 ] 「Rubyレシピブック 第2版 268の技」を買いたいと思ってるんですが レシピブックって言うのはもっといたほうがいいんですかね? 言語挫折厨なもんで、、、便利なら買いたいと思っています。
101 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:52:58 ] >>100 対象がほんのり古いが、「Rubyは実際にどう書くのが一般的と考えられてるのか」がたくさん載っててとても便利 95%くらいは今でも使える、基本ライブラリを使うときはこう書いておけばとりあえずは恥ずかしくない、というコード片が満載 独学可能な領域なので無理してまで買わなくてもいいが、買うと勉強が早く済むよ
102 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:56:49 ] 間違いなく買い 初版持ってるけど、よれよれになってるよ
103 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 22:58:48 ] ありがとうございます、買い、みたいですね。 参考にさせていただきます。
104 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:17:10 ] WindowsのRuby/TKで簡単なランチャを作って使ってるんですが Rubyから別コマンドを実行するのがsystemしかなく ふつうにsystem使うと、コマンド終了待ちでRubyが止まっちゃうので Thread.new{system 'ほげほげ.exe 引数'} としてます 外部コマンド一つ起動するごとにスレッドが増えるけど 外部コマンドが終了すればスレッドも終了するだろうし 同時に起動することなんて多くても数十程度だろうから 大丈夫かなと forkしてexecするのが普通の同期しない外部コマンド起動のさせかたなんですか? Windowsなんでforkできないのです 1.9だとspawnが使えるんですけど
105 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:30:02 ] >>104 win前提ならstartコマンド経由で呼べばすぐ戻ってくる system "start ruby -e 'sleep 10'"
106 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:35:32 ] startはcmd.exeの内部コマンドなので GUIから呼ぶと一瞬cmd.exe起動の為に コマンドプロンプトウィンドウが出てしまうのです rubyw -e "system('start winver')" とかするとわかります
107 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:47:02 ] >>106 これはどうよ? require 'win32ole' wsh = WIN32OLE.new('Wscript.Shell') wsh.Run('cmd /c echo', 0, false)
108 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:51:39 ] ああ、wsh 厨が来た ってか Windows の cmd.exe の肝心なときに使えない度は異常
109 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:11:46 ] >>106 忘れてたorz Thread.new{system 'ほげほげ.exe 引数'}.kill というのは?スレッド殺してもプロセスまで殺さないはず。
110 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:19:59 ] >>108 ゲイツソフトに無理言うなよw
111 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:26:10 ] win32api使えばいいんじゃ ttp://d.hatena.ne.jp/mokehehe/20070812/createProcess
112 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:51:25 ] ちゃんとするならWin32APIなんでしょうね でも、お手軽じゃないなぁと Thread.new{system 'hoge.exe'} で、動いちゃってるので まあいいかなとそのままです >>109 すいません 私の場合は非同期に外部コマンドを起動したいだけなので 後々のコントロールできなくてもよいのです でも、Windowsで >>77 みたいなことをRubyにさせようとすると どうすればいいのでしょうね Win32APIを駆使? めんどくさそうだなぁ
113 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:17:57 ] >>112 CreateProcessするんじゃね? 使ったことないけど
114 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 09:31:01 ] 1.8で、コマンドプロンプトを見せるな、という制限を課されるといろいろつらいな。 CreateProcessなりShellExecute(Ex)なりを直接叩くしかないと思う。
115 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 09:36:05 ] IO.popen(program, "w") とか
116 名前:デフォルトの名無しさん [2009/04/07(火) 13:30:59 ] すみません。Cで拡張ライブラリを書くためにREADME.EXT.jaを 読んでいるのですが、次のような箇所があります。 > 既に『1.5 Rubyのデータを操作する』で一部紹介したような関数を > 使えば,Rubyの機能を実現している関数を直接呼び出すことが出来 > ます. > # このような関数の一覧表はいまのところありません.ソースを見 > # るしかないですね. これが書かれてから15年近く経った今でもそうなんでしょうか? 日本語・英語問わず、どこかに一覧表があれば欲しいのですが・・・。
117 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 18:07:07 ] rspec で BDD だとかなんかそんなのやってみようかなーと思ってるんだけど、 これってパブリックなメソッドの返り値しかチェックできないの? いくつも小さなメソッドに分割された、ある程度フクザツなメソッド作ってる最中は役に立たない?
118 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 18:22:29 ] >>117 逆 「作り始め」のメソッドの大きさはみんな一緒
119 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 18:34:39 ] tdiary 以外でテーマやスキンの充実した ruby アプリって何かありませんか。
120 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 19:31:53 ] Hiki
121 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 19:34:59 ] >>116 スレ違い
122 名前:119 mailto:sage [2009/04/07(火) 19:55:35 ] tdiary と同じテーマやスキン以外でお願いします>< MT や WP、Xoops みたいにド派手に変えられると嬉しいです。 Ruby ベースの CMS ttp://diaspar.jp/node/79 をみてもテーマ公開しているの少ないよね…。
123 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:01:41 ] >>117 RSpecでテストとか勉強しようと思ってずっと待ってるんだけど、そういう解説は見たことないね なんかテストのなんたるかを知ってる人が自由に使ってる感じがして、ちょっと寂しい 個々のマッチャとかの動作はわかりやすいんだけど、実際にこれどう使うのよみたいな
124 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 22:08:10 ] モデル・ビュー・コントローラの知識がないとたぶんダメ
125 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 22:27:18 ] >>122 PinkyBlog
126 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 22:29:47 ] >>123 TDDは俺もよくわからんので勉強中。 書籍だと「10日でおぼえる Ruby on Rails入門教室」がTDDやりながら開発する解説があるらしい。 rspecかどうかはわかんないけど Amazon.co.jp: 10日でおぼえる Ruby on Rails入門教室: arton: 本 www.amazon.co.jp/dp/4798114723 images-jp.amazon.com/images/P/4798114723.09.MZZZZZZZZZ.jpg
127 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 22:43:56 ] RSpecでBDDやって遊んでるだけでも、17インチ液晶の左右分割では幅が足りないと強く思う 家でだらだらスクリプト書いてるだけだしこれくらいでいいじゃんとこれまでは思ってたけど、ちょうど足りない 少なくとも19が欲しい 大きめフォントをちょっと小さくしたけど、やっぱ足りん うおー
128 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 01:22:05 ] >>116 ttp://doc.loveruby.net/refm/capi/ ずっと503 ttp://www.ruby-doc.org/doxygen/1.8.4/index.html doxygenの自動生成だからヘッダ読むのとほとんど変わらない ttp://www.nilab.info/docs/Ruby1.6.8/refm364.html かなり古い、1.6.8 こちらの知る限り現状はこんなところ loveruby.netが直れば一番いいんだろうけどずいぶん前から503のままなので期待薄
129 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 07:49:58 ] csvをMySQLに食わせるtsvにしたくてモゾモゾやってるんだけど a = ["mesi", "kue", "", "unko"] として a.map do |x| if x == "" x = "\N" end end の結果が [nil, nil, "\N", nil] となるのは何でなんでしょう。eachじゃダメだし。 つーか、["mesi", "kue", "\N", "unko"]にするステキな方法を 教えてくだしゃんせ。
130 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 08:12:54 ] ブロックつきの map{} は、ブロックの返り値で要素を置き換える で、 irb> p (if 1 == 2 then "true!" end) nil else 節がない if 文で条件が偽だった場合の文そのものの返り値が nil だ else を明示的に書くのがよい a.map{|e| if e.empty? then "\n" else e end}
131 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 08:24:47 ] x = "\N" は x = "\N" の返り値がたまたま "\N" だったからたまたま動作しただけだな ブロックつきメソッドは仮引数に代入することで動作するわけではない [1,2,3].map{|x| x = x*2} というような書き方は誤りで、 単に返り値だけを [1,2,3].map{|x| x*2} のように書く
132 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 08:37:27 ] △ ブロックの返り値で要素を置き換える ○ ブロック内で最後に評価された値が要素と置き換わる ブロックつきmapの「ブロックの返り値」は変換後の配列だ ブロックで最後に評価された値のことをブロックの返り値と呼んではいけない
133 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 08:53:51 ] × if 文 ○ if 式 公式でも if 文って書いてしまってるけどな 既存言語の影響は強い
134 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 09:30:31 ] Rubyでは文も式なだけであって、文を文と呼ぶのが誤りなわけではない。
135 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 09:59:47 ] 最新のparse.yを見る限り、 symt→expr→arg→primary→if という流れになってるので、 ifは式です。
136 名前:119 mailto:sage [2009/04/08(水) 10:30:51 ] >>125 ありがと。 「CSS着せ替えテンプレートプロジェクト」の存在も知ることができて感謝。
137 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:49:01 ] 少々お聞きします。 以下のソースにて、Ctrl+Cをトラップしようとして、 trap 'INT' do puts "TRAP!!" raise "ctrl+c" end loop do Kernel.sleep 1.5 end 実行してみたんですが、 Ruby win32 + コマンドプロンプト : OK Ruby win32 + コマンドプロンプト + cygwin bash: OK Ruby win32 + cygwin terminal + cygwin bash: x Ruby cygwin + cygwin terminal + cygwin bash: OK という結果になってしまいました。 Ruby win32 + cygwin の bashでCtrl+Cをトラップすることはできないのでしょうか?
138 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 11:10:14 ] >>133-135 Rubyでの文は「カッコなしのメソッド呼び出しの引数よりも優先順位が低い式」のこと。
139 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 11:12:34 ] >>137 > Ruby win32 + cygwin の bashでCtrl+Cをトラップすることはできないのでしょうか? できてるだろ。 > Ruby win32 + コマンドプロンプト + cygwin bash: OK 非cygwinプログラムからはcygwin terminalはttyには見えないので、 Ruby win32 + cygwin terminal ではできない。
140 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 11:25:04 ] >>139 ごめん。コピペミス・・・ > Ruby win32 + コマンドプロンプト + cygwin bash: OK Ruby win32 + コマンドプロンプト + cygwin bash: x ていうか、調べてたら cygwin から nativeアプリに(non-cygwin app) Ctrl+Cは鬼門みたいですね…。
141 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:04:44 ] >>133 ○if文 ◎if式 こうでしょ? 例えば関数呼び出しは式であり文でもあり。
142 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:07:16 ] とりあえず一つだけ。 初心者スレに過度の原理主義はあんまりよくない。 やりたいなら、本スレにコピペでも持って行って存分にやればいいと思うんだ。