09/01/08 23:55:18
>>228
ぐぐる以前に、そのページのコードの前にある参考ページに全部
書いてあるじゃん。
一般論としてということであれば、やっぱりぐぐる以前にリファレンスなり
入門なりを読むべきでしょう。
238:デフォルトの名無しさん
09/01/09 00:17:42
XP SP3、Ruby 1.8.6、エクセル2003使用者で、WIN32OLEを使ったプログラムを書いてるんですが、
エクセル操作の命令をメソッドの定義内で書いたときにエクセルのメソッド名?に空白が
含まれているものだとエラーが出てうまく動きません。
例:
def hoge
excel.Sheets(2).Select
end
は正しく動くのですが、
def fuga
excel.Sheets(2).Move After = excel.Sheets(1)
end
は"Move After"の"Move"と"After"の間に空白が入っているために
”dynamic constant assignment”というエラーが出てしまいます。
スペースをなくしたりするとこのエラーは消えますが、当然他のエラーが出ます。。
おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか?
色々なエクセルのメソッドを自作のメソッドに定義して呼び出して一度に実行、みたいなことをさせたいと思っているんですが
文法上メソッドの定義内でこういったエクセルのメソッドを定義するのは無理なのでしょうか?
何かうまい解決策がありましたらご教授お願いします。
239:デフォルトの名無しさん
09/01/09 00:32:02
>>238
> おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか?
その通り
スペース含んでたりしてRubyがメソッド名としてうまくパースしてくれないときは Object#send を使うといい
excel.Sheets(2).send('Move After') = excel.Sheets(1)
ただWIN32OLEでExcel使ったことないから動作確認はしてない
240:デフォルトの名無しさん
09/01/09 00:37:19
おなじくExcelは詳しくなくて申し訳ないが
MoveがメソッドでAfterは引数だって情報が引っ掛かったのよ
()でくくってみるってのはどう?
241:デフォルトの名無しさん
09/01/09 00:39:38
win32oleは使ったことないが多分invoke使うべきだろう
URLリンク(doc.loveruby.net)
242:デフォルトの名無しさん
09/01/09 00:42:06
>>229
でも>>228の該当部分の構文要素を分解すると、
「doc」「/」「:h1」なんだよな……。
243:238
09/01/09 01:07:01
>>239
助言ありがとうございます。
教えていただいた方法を試してみたのですがダメでした・・・
syntax error, unexpected '=', expecting kEND
excel.Sheets(2).send('Move After') = excel.Sheets(1)
>>240
助言ありがとうございます。
Move(After)ってことですよね。こちらも同様にダメでした。。
syntax error, unexpected '=', expecting kEND
excel.Sheets(2).Move(After) = excel.Sheets(1)
>>241
助言ありがとうございます。
これも同様にダメでした・・・orz
syntax error, unexpected '=', expecting kEND
244:デフォルトの名無しさん
09/01/09 01:10:32
そもそもメソッドの返り値に代入なんかできないからね
245:238
09/01/09 01:13:01
すみません、>>243に書き忘れていましたが、
>>241
excel.invoke('Sheets(2).Move After') =excel.Sheets(1)
excel.Sheets(2).invoke('Move After') =excel.Sheets(1)
excel.Sheets(2).Move.invoke('After') = excel.Sheets(1)
と試してみましたがすべて下記のエラーでした。
syntax error, unexpected '=', expecting kEND
246:227
09/01/09 01:17:37
わかりにくかったかもしれないから再度。
たとえば
URLリンク(blog.livedoor.jp)
ここのカテゴリの部分の要素を抜き取りたいのです。
div.entry-categoryで抜き出せばいいのですけど、複数あった場合はだめで、
複数あった時の共通するのはURLにcat_xxxxx.htmlとなります。
ので、hrefにcat_があればその要素を抜き出したいのですが・・・
247:227
09/01/09 01:20:36
わかりにくいかもしれませんね。
<a href="URLリンク(example.com)カテゴリ</a>
<a href="URLリンク(example.com)カテゴリ2</a>
のカテゴリ、カテゴリ2を抜き出したいです。
248:デフォルトの名無しさん
09/01/09 01:23:08
あーVBにキーワード引数が有ってそれをそのまま書こうとしてハマってるのか
多分こうだ
excel.Sheets(2).Move("After" => excel.Sheets(1) )
URLリンク(homepage1.nifty.com)
249:初心者
09/01/09 01:28:42
>>247
inner_htmlでおkです
250:227
09/01/09 01:31:10
>>249
inner_textだとカテゴリ,カテゴリ2と抜き出せるのですがね。
URLにcat_を含むaタグのinner_textを抜き出したいのです。
251:238
09/01/09 01:32:54
>>248
出来ました!
ありがとうございます!!
なるほど、そんな書き方があったんですね。
これで他のキーワード引数付きのメソッドも問題なく使えそうです。
本当にありがとうございましたm(_ _)m
252:デフォルトの名無しさん
09/01/09 01:33:11
a要素を全部取ってきてselectすれば?
253:228
09/01/09 01:44:46
みなさま、ありがとうございます
>>229
クオーテーションでくくっても、その場合Rubyのみの検索と同じです
Javaのように、やたら長いAPIだとぐぐると一発で出てくるのですが
>>230
>>232
オーバーロードだったのですね
リファレンスは見てみましたが、該当するものを見つけられませんでした
お手数をおかけしました
>>231
そうかも知れませんが、mechanizeを使うことが結構大きなモチベーションでした
>>233
丁寧にありがとうございます
|h1|はここに限らずよく使う構文ですので何となく判るのですが
一例として、これも調べるのに苦労したことがあります
使うだけなら、黙って書き写せばいいのだけど、欲張ると急に難しくなる
>>234
ありがとうございます、CSSセレクタとかは詳しくはないものの別件で調べてみました
>>235
mechanizeは結構複雑で苦労していますが、よくやっています
>>237
ごもっともですが、こういうとき普通はどう調べるのかなと疑問に感じました
Rubyは便利な機能が多いのですが、他人のコードを見て何をしているのか
今のところ自分の理解を超えているものが多く、読み解くヒントが欲しかったのです
254:デフォルトの名無しさん
09/01/09 02:03:14
>>227
XPathで
//a[contains(@href, "cat_")]
という風に指定すれば意図している要素が得られる
が,HpricotのXPath対応がお粗末だから(少くとも手元のHpricotでは)うまくいかない
そこで,>>252が言うように
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
みたいな感じでごまかしとけばいいんじゃない?
まあ,nokogiri使えばXPathでうまくいくかもね
255:デフォルトの名無しさん
09/01/09 02:28:09
ソース見て分からないってのは基礎が出来てないからだと思うから、
詳細な解説付きの本でも読む事を勧める。
いちいちソースの解説求めてたら、答えるほうも大変だし飽きるでしょ。自分で調べて苦労してないからすぐ忘れて何度も同じ事訊くだろうし。
256:227
09/01/09 02:29:12
>>252,>>254
ありがとうございます。
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
でやりたいことができました。
XPATHの方はnokogiriいれてやってみます!
257:デフォルトの名無しさん
09/01/09 03:29:21
自分のサイトのアドレスを取得する方法ってりあますか。
直にURL記述している部分があって、サーバ変えた際に色々と書き換えなどめんどうなので、
この部分をプログラムが今動いているサーバ(サイトURL)アドレスを取得して使ってくれるようにしたいのですが。
258:227
09/01/09 04:45:41
何度もすいません。
div.abcかdiv.efgがある場合に抽出するにはsearch("div.abc||div.efg")でよいのでしょうか?
それかsearch("div.abc")がnilになった時にsearch("div.efg")するように分岐させればよいのでしょうか?
いまいち論理演算の使い土器がわからないです。
259:デフォルトの名無しさん
09/01/09 04:49:38
>257
その方法を考える前に「直にURLを記述」するのを1回だけにするのはどうよ。
コードの頭の辺りで定数として入れておいて、後はコード内で補完って感じで。
そうすると書換えの時も1回で済むし、無駄なアクセスも増えないから重くもならないかと。
260:デフォルトの名無しさん
09/01/09 04:54:26
url=URLリンク(yoursite.net)みたいにね。
外部参照(だっけ?)できるようにすればそれ参照すればいいんじゃね?
261:デフォルトの名無しさん
09/01/09 05:53:39
>>257
どんなフレームワーク使ってるかわからんけど
クライアントのリクエスト情報が入ったインスタンスの中を探せばあるだろ
WEBrick::HTTPRequest#hostとかCGI#server_nameとか
262:デフォルトの名無しさん
09/01/09 06:34:16
>>258
search の引数には「CSSセレクタ」か「XPath」が使える(Hpricot独自の拡張も入ってるが)
どちらも「HTMLとかのタグの位置を表記する方法」だ(大雑把)
というわけでCSSセレクタの使い方でも調べとけ
他人にいちいち書き方を聞くことはなくなるだろう
263:デフォルトの名無しさん
09/01/09 06:54:42
>>257
定数ENVの中に何かいいの入ってるかも
さくらインターネットと自前のLANサーバでスクリプトを共有させてたときは
LOGIN_NAMEで初期値変えてたなあ
264:デフォルトの名無しさん
09/01/09 07:25:17
>>257
奥の手
require 'open-uri'
open('URLリンク(forts.jp)').read.strip
265:デフォルトの名無しさん
09/01/09 08:59:47
ruby で argv を書き換える方法ってありますか?
Cだと **argv をいじると、プロセス一覧(ps等)に反映されるのですが ruby でも同じことをやりたいです
266:デフォルトの名無しさん
09/01/09 12:11:12
$0
267:デフォルトの名無しさん
09/01/09 12:41:44
>>257
RackならRequest#urlがある
268:デフォルトの名無しさん
09/01/09 15:46:56
>>259
>>260
>>261
>>263
>>264
>>267
とりあえずファイルに設置サーバのアドレス書き込んで、
それから読み出して使うように処理変えることにしました。
色々とアドバイスありがとうございます。
269:デフォルトの名無しさん
09/01/09 17:03:54
>>265
$0 = 'winny'
OSによっては駄目かもしれない。
270:デフォルトの名無しさん
09/01/09 17:29:53
Mechanizeで教えてください。
ブラウザでサイトに接続。
あるフォームをポストすると,ファイルがダウンロード。
そのページはかわらずそのまま。リンクやボタンをクリック可能。
(あたりまえといえばあたりまえなのですが)
という作業をMechanizeでやろうとしてます。で
agent = WWW::Mechanize.new
agent.get(hogeサイト)
agent.submit(agent.page.form(hogeフォーム))
agent.page.bodyでファイルを取得
なのですが,この段階で,agent.pageのクラスが
WWW::Mechanize::Fileになってしまって,agent.page.backとかもできない。
フォームをsubmitする前のところから,次の作業をするにはどうすればいいでしょうか?
reserve=agent.get(hogeサイト)
みたいにしても,reserveは参照だから,同じでした。
271:デフォルトの名無しさん
09/01/09 17:34:24
transactとかあったような
272:デフォルトの名無しさん
09/01/09 17:36:59
めんどくさいなあ
見た目に簡単なのは、WWW::Mechanize#transact を使うこと
URLリンク(d.hatena.ne.jp)
ブロック開始時の履歴が保存されて、ブロック終了時に書き戻される
agent.get(hoge_uri)
agent.transact{|a|
a.page.form_with(:method => value).click_button.save_as(path_to_save)
}
agent.page # hoge_uriを維持
273:デフォルトの名無しさん
09/01/09 17:45:14
リクツとしてわかりやすいのは、WWW::Mechanize#visited_page
URLリンク(d.hatena.ne.jp)
URL を引数に渡すと、そのURLにアクセスしたときの Page オブジェクトを履歴から探してきて返す
agent.get(hoge_uri)
agent.page.form_with(:method => value).click_button.save_as(path_to_save)
agent.visited_page(hoge_uri).links_with...
agent.page の代わりに agent.visited_page(hoge_uri) を使うことで、いつでも過去の Page オブジェクトを引き出せる
いちいち書くのめんどい場合は
prev_page = agent.visited_page(hoge_uri)
とでもして変数に入れとけ
あ、Mechanize 0.8.5 より前の Mechanize を使ってる場合は form_with(:method => value) や click_button が動かないんで、
代わりに forms.method(value) や submit 使ってくれ
274:デフォルトの名無しさん
09/01/09 17:56:07
transact ってそう使うのか
275:デフォルトの名無しさん
09/01/09 18:01:50
>>274
たぶん、そもそもこういう用途向けに作られたんじゃないかと思われる
トランザクションと銘打っておきながらブロック内で履歴が新規に開始されていない
(ブロック直前のページがブロック内初回アクセスのリファラ候補になってる)あたりが怪しい
276:デフォルトの名無しさん
09/01/09 18:08:08
>>267
Rack(笑)
Rackって使ってる人多くない感じがセンデロルミノソ
277:デフォルトの名無しさん
09/01/09 18:13:10
個々に好きなの使ってる感じは嫌いではない俺
278:デフォルトの名無しさん
09/01/09 18:48:50
プログラミング言語 Ruby
David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳
2009年01月24日 発売予定
URLリンク(www.oreilly.co.jp)
> 1章 イントロダクション
> 2章 Rubyプログラムの構造と実行
> 3章 データ型とオブジェクト
> 4章 式と演算子
> 5章 文と制御構造
> 6章 メソッド、proc、lambda、クロージャ
> 7章 クラスとモジュール
> 8章 リフレクションとメタプログラミング
> 8.5 フック
> 8.6 トレーシング
> 8.7 ObjectSpaceとGC
> 8.8 カスタム制御構造
> 8.9 method_missingとconst_missingの活用
> 8.10 メソッドの動的な作成
> 8.11 エリアスチェイン
> 8.12 ドメイン固有言語(DSL)
> 9章 Rubyプラットフォーム
> 9.1 文字列
> 9.2 正規表現
> 9.3 数値と数学
> 9.4 日付と時刻
> 9.5 コレクション
> 9.6 ファイルとディレクトリ
> 9.7 入出力
> 9.8 ネットワーキング
> 9.9 スレッドと並列処理
> 10章 Ruby環境
279:デフォルトの名無しさん
09/01/09 18:52:07
>>278
これもっと早く出すべきだったんじゃね?
なにこのわかった人向けの基本の解説本
280:デフォルトの名無しさん
09/01/09 18:55:58
>>278
> 2.4 プログラムのエンコーディング
> 2.4.1 プログラムのエンコーディングの指定
> 2.4.2 ソースエンコーディングとデフォルト外部/内部エンコーディング
> 3.2 文字列
> 3.2.6 文字列のエンコーディングとマルチバイト文字
お。
281:デフォルトの名無しさん
09/01/09 19:04:33
Matzが直接本を書くのは、1.6ごろの宝石本以来?
282:デフォルトの名無しさん
09/01/09 19:18:29
それとほとんど内容同じ鴨試練
283:デフォルトの名無しさん
09/01/09 19:23:42
今のバージョンに合わせた内容にしてるだけだろうな。
それでも大きな違いはあるだろうけど。
284:デフォルトの名無しさん
09/01/09 19:26:58
良くも悪くも目次が「普通+言語作者周辺が語るディープツッコミ」で終わってるからな
285:デフォルトの名無しさん
09/01/09 20:13:07
本の最初の部分で「他の言語経験がなく、これからRubyでプログラミングを始める人を対象とする。」みたいに
書いてあるが、実際にはまったくのプログラミング初心者には向かないかもしれない。
一番不思議に思ったのは、練習問題。
ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
正規表現を使わせる問題が出てくる。
これじゃプログラミング初心者はつまずいてしまうのではないだろうか。
なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。
286:デフォルトの名無しさん
09/01/09 20:15:58
プログラミングPerlもプログラミング初心者が1ページ目から読むようにはできてなかった気がする
(まああれは厚さも問題だが)
287:デフォルトの名無しさん
09/01/09 20:51:12
>>278
100冊カートに入れた。
そしてカートから出した。
288:デフォルトの名無しさん
09/01/09 21:11:27
カートには99冊残ってるわけか
289:デフォルトの名無しさん
09/01/09 21:11:31
いまRubyマニュアルを読めてるような人には有り難味の薄い書物であるように見える
290:デフォルトの名無しさん
09/01/09 21:13:03
>>289
購入者の6割はお布施だと思うよ
291:デフォルトの名無しさん
09/01/09 21:14:15
原著を斜め読みした限りでは、初心者向けの本ではない。
1.9の解説書として考えるのが妥当だと思う。
292:デフォルトの名無しさん
09/01/09 21:18:23
>>288
それは必ず成り立つのですか?
293:デフォルトの名無しさん
09/01/09 21:19:34
詳説Rubyと名付けるのが妥当
294:デフォルトの名無しさん
09/01/09 21:20:49
オライリーの "プログラミング#{言語名}" という本は総じてガチ初心者お断りだから、
間違って買ってしまう人以外は平気だと思う
295:デフォルトの名無しさん
09/01/09 21:22:04
設計者の書いた本は、仕様と同時に言語の思想とかも与えてくれるから
バイブル扱いされやすい気がする
K&R、ラクダ、D&Eみたいに・・・・・本家amazonの評価が異様に良いのも気になる
296:デフォルトの名無しさん
09/01/09 21:23:12
>>293
だよなぁ・・。
なんかこう、プログラミング初心者向けですよ~みたいなこと言っておいて
「プログラミングの世界ってどんなんだろう?」という純粋な初心者が、いつのまにか「Rubyだけの世界」に洗脳されそうだ。
もっとプログラミングの本質にこだわった本かと思ったのに。。
297:デフォルトの名無しさん
09/01/09 21:28:58
プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思うな。
といってプログラミングの初心者にそれを理解しろってのは酷だけど。
298:デフォルトの名無しさん
09/01/09 21:31:12
>>297
> プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思う
URLリンク(www.amazon.co.jp)
イエスこの本マジお勧め
299:デフォルトの名無しさん
09/01/09 21:33:12
>>298
それなんでRuby採用したんだろうな
300:デフォルトの名無しさん
09/01/10 01:51:35
> Rubyは変なキツネの漫画を読んだだけなので
www
ホワイの感動的なやつだな
>>205
C++のプロは「C++のプロ」とは自分で言わんだろ。
自称「C++のプロ」と言えばなんとなくニュアンスはわかる
301:デフォルトの名無しさん
09/01/10 02:40:12
>>285
>ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
>問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
>正規表現を使わせる問題が出てくる。
>これじゃプログラミング初心者はつまずいてしまうのではないだろうか。
それは既にhashや性器表現を知ってるからそう思うだけで教育的効果はあると思うよ
初心者の場合hashや性器表現を使わずにその問題を解こうとして悩むのがいい
そうすれば次の章で出てくるhashや性器表現の意味や必要性を理解しやすい
唐突にhashや性器表現が出てくる方が初心者は混乱する
>なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。
どの辺が?
302:デフォルトの名無しさん
09/01/10 02:43:11
>>300
大学生のときは上には上がいる、というか、上しかいない状況だったが、
就職してからは、下が果てしない、というか、下しかいない状況だった。
プログラミングで食ってりゃプロなのは間違いないが、それとスキルは直結しない。
303:デフォルトの名無しさん
09/01/10 02:52:58
まつもとゆきひろって2ちゃんねるの管理人だった人?
304:デフォルトの名無しさん
09/01/10 03:33:40
>>301
ネタとわかってても性器表現が気になってしょうがないんだがw
305:デフォルトの名無しさん
09/01/10 07:07:39
>>302
下ばっかり見てると腕落ちますよ
306:デフォルトの名無しさん
09/01/10 09:24:05
rubygemsってどう呼ぶんですかね?
ルビィゲムズ?
307:デフォルトの名無しさん
09/01/10 09:28:57
>>306
gem(ジェム): 宝石。宝玉。
URLリンク(dictionary.www.infoseek.co.jp)
308:デフォルトの名無しさん
09/01/10 09:44:34
>>307
㌧
309:デフォルトの名無しさん
09/01/10 13:08:05
>>266
>>269
遅くなりましたがありがとうございます!!
perl と同じなんですね
助かりました!
310:デフォルトの名無しさん
09/01/10 13:10:27
>>301
なるほどね。
311:デフォルトの名無しさん
09/01/10 14:01:03
青空文庫形式のテキストを処理しています。
青空文庫形式では親文字とルビを次のように書いています。
|親《おや》|文《も》|字《じ》
これを一つにまとめる形で、
|親文字《おやもじ》
という形に変換(置換処理)したいのですが、どうすれば良いでしょうか。
親文字が幾つあるかは一定していません。
この処理を一行毎に行いたいのです。
312:デフォルトの名無しさん
09/01/10 14:59:15
>>311
irb> s = '|魑《ち》|魅《み》|魍《もう》|魎《りょう》が|跋《ばっ》|扈《こ》する'
irb> 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|¥¥1¥¥3《¥¥2¥¥4》")
=> "|魑魅魍魎《ちみもうりょう》が|跋扈《ばっこ》する"
gsub!は置換が行われればレシーバ(s)を、行われなければnilを返す。
1っていうのはとくに意味はない。後置whileを繰り返すためだけの存在。
313:デフォルトの名無しさん
09/01/10 15:13:57
s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}
正規表現であまり悩みたくない人向け
>>312
gsub の第 2 引数は使うなとお達しが来てるはずだが
314:デフォルトの名無しさん
09/01/10 15:27:57
初心者スレで transpose と sprintf 使って手抜きしてる人には言われたくないだろうな
s.gsub(/(|.+?《.+?》)(?!|)/){
base = Array.new
ruby = Array.new
$1.scan(/|(.+?)《(.+?)》/){|m|
base.push(m[0])
ruby.push(m[1])
}
# 以下の文字列が gsub(re){str} の str に当たるもの
"|#{base.join('')}《#{ruby.join('')}》"
}
前にも gsub の 2番目の引数使ってた人がいたけど同一人物かね
無駄にエスケープ連打せずにブロック使えという認識になってたと思う
315:デフォルトの名無しさん
09/01/10 15:42:35
>>312
s = "|日《に》|本《ほん》|語《ご》の|漢《かん》|字《じ》"
1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|\\1\\3《\\2\\4》")
puts s
|日本語字《にほんご》の|漢《かんじ》
316:デフォルトの名無しさん
09/01/10 15:43:46
> gsub の第 2 引数は使うなとお達しが来てるはずだが
kwsk
317:デフォルトの名無しさん
09/01/10 16:28:35
正規表現で漢字のかんむりやへんやつくりをマッチさせるにはどうするんですか?
318:デフォルトの名無しさん
09/01/10 16:32:31
>>317
無茶言うな
どっかの誰かに「部首と漢字文字との対応表データ」を作ってもらうしかないね
ネット上には適当なデータを作ってる熱心な人がいるから、それをRubyでどうにか使うしか
319:デフォルトの名無しさん
09/01/10 16:37:40
発想としては斬新でけっこう好きだ
その視点を失わずにプログラミングして欲しいなと思う
320:デフォルトの名無しさん
09/01/10 17:11:49
このスレの少し前でRackの話が出てたけど
実際のところ、Rackって日本ではどのくらい使われてるんだろうね
日本語の解説記事もいくつかあるから、少なくともドマイナーって程ではないと思うが
321:デフォルトの名無しさん
09/01/10 17:49:37
流石って
さす+が
さ+すが
どっちになってます?
322:デフォルトの名無しさん
09/01/10 17:56:54
>>321
熟字訓だから「さすが」で分かれない
明日が「あし - た」でも「あ - した」でもないのと同じ
323:デフォルトの名無しさん
09/01/10 19:33:38
(3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
324:デフォルトの名無しさん
09/01/10 19:34:58
>311です。皆さんありがとうございました。
325:デフォルトの名無しさん
09/01/10 19:47:19
>>323
等しくない
たぶん浮動小数点数の誤差のせい
irb(main):024:0> sprintf("%.16f", 3.2 - 2.0)
=> "1.2000000000000002"
irb(main):025:0> sprintf("%.16f", 1.2)
=> "1.2000000000000000"
326:デフォルトの名無しさん
09/01/10 19:51:08
>>323
浮動小数点だから
何かを計算した結果の浮動小数点の値と、
それ以外の数式で何かを計算した(あるいは計算していない)浮動小数点の値が、
全く同じになるというようなことはふつう無い
だから、小数を含んでいる数値は絶対にイコールで比較してはいけない
どうしても比較したい場合は、たとえばその差を誤差並に小さな数 Float::EPSILON と比較する
irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
irb> (3.2 - 2.0) -1.2 < Float::EPSILON*10
true
10倍や100倍以内なら同じ数値とみなしてよい
327:デフォルトの名無しさん
09/01/10 19:53:11
>>323
なるほど。
てことは、浮動小数点数の比較は安易にするなってことですかね。
328:デフォルトの名無しさん
09/01/10 19:55:18
>>326
ありがとうございます!
そうゆうもんなんですね。
PHPから入った素人なんで、勉強になりました。
329:デフォルトの名無しさん
09/01/10 19:55:38
あ、いかん、絶対値とらないと
((3.2 - 2.0) -1.2).abs < Float::EPSILON*10
こういうのでよろしこ
330:デフォルトの名無しさん
09/01/10 19:55:47
rubyに限らず実数の比較をしないってのは基本
おおむね>>326の通りなんだけど、欲を言えば絶対値を取っておくほうがいい
331:デフォルトの名無しさん
09/01/10 19:57:40
厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん
一般的な用途では文字レベルでしか判断しないからな
irb> (3.2-2.0).to_s == 1.2.to_s
true
332:デフォルトの名無しさん
09/01/10 20:29:17
なぜ文字列にして比較を??
数値の比較の話じゃなかったの?
333:デフォルトの名無しさん
09/01/10 20:59:37
>>332
文字列は
てか浮動小数点の指数の基数って
初心者の頃はずっと10なんだと思ってた。
で、なんで誤差が発生するんだとさんざん悩んでみたり
今からしたら俺アホかと
334:デフォルトの名無しさん
09/01/10 21:02:00
しまったメインの話題を途中やめにしてた
数値を文字列に変換する過程である程度の誤差を丸めてくれるなら、
>>329みたいな過程を記述する必要がないってこと
たとえruby内で記録されている値が
1.19999999999 であっても
1.20000000001 であっても
表示するときは最下位を丸めて 1.2 になると。
浮動小数点はちょっとわかりにくいからwikipediaで調べてみそ
URLリンク(ja.wikipedia.org)浮動小数点数
335:デフォルトの名無しさん
09/01/10 21:05:56
irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
これが true になるような左辺ってあるんだろうか
336:デフォルトの名無しさん
09/01/10 21:09:41
左辺が絶対値ってことだと思うが左辺の方が小さかったらEPSILONの意味がないな
337:デフォルトの名無しさん
09/01/10 21:10:10
0では?
338:デフォルトの名無しさん
09/01/10 21:11:50
nil?
339:デフォルトの名無しさん
09/01/10 21:19:19
URLリンク(www.google.co.jp)
ちょびっと逆転してる
340:デフォルトの名無しさん
09/01/10 21:20:10
URLリンク(www.google.co.jp)
間違えたこっちだった
341:デフォルトの名無しさん
09/01/10 21:27:17
>>332
目に見える範囲の小数が等しいかどうかを調べるだけなら
これが「我々がアタマの中で考えてる」処理に一番近い
どちらが大きいかということが必要な場合はあまり(あるいは全く)使えないので用途に注意
342:デフォルトの名無しさん
09/01/10 21:32:43
>>335
irb> (5.5 - 2.25) - 3.25 < Float::EPSILON
=> true
343:デフォルトの名無しさん
09/01/10 21:40:17
>>326
<=にしたらtrueになった
irb> (3.2 - 2.0) -1.2 <= Float::EPSILON
true
344:デフォルトの名無しさん
09/01/10 21:41:18
>>342
それは単に 0.0 なのでは
0.5 も 0.25 も割り切れてるもの
345:デフォルトの名無しさん
09/01/10 22:25:21
Float::EPSILON < Float::EPSILON
false
Float::EPSILON <= Float::EPSILON
true
0.0 < Float::EPSILON
true
って話?
346:デフォルトの名無しさん
09/01/10 22:27:51
Float::EPSILON とは <= で比較するのが正しいのかな
347:デフォルトの名無しさん
09/01/10 22:30:50
A <= B と A < B || A == B の動作違うのってまずくね
348:デフォルトの名無しさん
09/01/10 23:00:14
rubyってDLL作れる?
rubyで作ったプログラムをVBAやC#みたいな他ので使いまわせるようにしようと思ったら
どういう形式がいい?
349:デフォルトの名無しさん
09/01/10 23:05:35
>> 336
マシンイプシロン Float::EPSILON は
1.0 + Float::EPSILON != 1.0
になる最小の数って意味だから違う。
IEEE754 の浮動小数点表現では、32 ビットの単精度でも指数部は 8 bits、仮数部 23 bit あるから
EPSILON はせいぜい 2.0**(-23) 程度
>> Float::EPSILON + 1.0 == 1.0
=> false
>> Float::EPSILON/2 + 1.0 == 1.0
=> true
>> 1e-20 < Float::EPSILON
=> true
だから、ちゃんと比較するなら絶対値で割ってから比較するべき
abs((a-b)/b) < Float::EPSILON
とか。b < Float::EPSILON のときの処理も必要だけど。
350:デフォルトの名無しさん
09/01/10 23:23:19
1.0 + Float::HOGE == 1.0
になる最大の値 HOGE のことを何と言いますか
351:デフォルトの名無しさん
09/01/10 23:25:12
マシンウプシロン
352:デフォルトの名無しさん
09/01/10 23:29:49
Delphiだと引数にEpsilonを指定できる浮動小数用の比較関数(SameValueだっけか)が
あるんだけど、Rubyにはないのん?
いちいち絶対値とってそれがEpsilon以下って書かなきゃならない?
組み込みかライブラリであれば教えて頼む
353:デフォルトの名無しさん
09/01/10 23:32:30
URLリンク(i.loveruby.net)
354:デフォルトの名無しさん
09/01/11 00:00:41
Ruby Cookbookに載っているコード
class Float
def approx(other, relative_epsilon=Float::EPSILON, epsilon=Float::EPSILON)
difference = other - self
return true if difference.abs <= epsilon
relative_error = (difference / (self > other ? self : other)).abs
return relative_error <= relative_epsilon
end
end
100.2.approx(100.1 + 0.1) # => true
10e10.approx(10e10+1e-5) # => true
100.0.approx(100+1e-5) # => false
355:デフォルトの名無しさん
09/01/11 00:04:56
浮動小数点を比較しなきゃ逝けない用途って何?
コンピュータに向いてない作業の一つだな。
356:デフォルトの名無しさん
09/01/11 00:14:26
シミュレーション?
357:デフォルトの名無しさん
09/01/11 00:27:31
RubyでGUIアプリケーションは作成可能でしょうか?
友人からは、GUIアプリケーションは
VC++、VBとかじゃないと無理と聞いたのですが・・・
358:デフォルトの名無しさん
09/01/11 00:37:12
>>340
日本ではまだまだ遠いな
URLリンク(www.google.co.jp)
359:デフォルトの名無しさん
09/01/11 00:37:34
>>354
self と other を比較する前に絶対値とらないと駄目なんじゃ。
360:デフォルトの名無しさん
09/01/11 00:38:08
def check(name)
/name/ =~ "hiroyuki"
以下略
で/name/ をnameでマッチさせるのではなく引数の値を使うにはどうすればいいでしょうか?
361:デフォルトの名無しさん
09/01/11 00:50:37
>>357
スレリンク(tech板:302-312番)
362:デフォルトの名無しさん
09/01/11 01:08:45
ここまでBigDecimalへの言及無し。
URLリンク(www.ruby-lang.org)
irb> require 'bigdecimal'
=> true
irb> BigDecimal.new("3.2") - BigDecimal.new("2.0") == BigDecimal.new("1.2")
=> true
363:デフォルトの名無しさん
09/01/11 01:11:56
浮動小数点数の比較の話をしてるんだからBigDecimalの出る幕は無いだろ
364:デフォルトの名無しさん
09/01/11 01:20:00
>>354
サンクス。組み込みではないっつーことか。
>>355
まーゲーム作るときとかちょっとした数値計算、
後ユニットテスト書くときなんかにはいるけど、
確かに最後の例以外Rubyには不適だかなあ
365:デフォルトの名無しさん
09/01/11 01:21:22
>>360
def check(name)
name =~ "horioyuki"
で、
check呼ぶ時に正規表現リテラル渡せばよいのでは?
check(/.+oyu.+/)
366:デフォルトの名無しさん
09/01/11 01:26:58
ちょっとお聞きしたいのですが、
wikiとかの表示によくあるプログラムの実行時間を
自分のスクリプトで表示したいのですが、
簡単にmsecの実行時間を測る方法はないでしょうか?
スクリプトの終了前に
puts Process.times.to_yaml
とかやってみたんですが、表示がさっぱり?です。
utimeとstime を足したものが実行時間なのかな?
367:デフォルトの名無しさん
09/01/11 01:28:51
あれは単にWikiテキストの処理開始時と
処理終了時の差を取っただけなんじゃないか?
368:デフォルトの名無しさん
09/01/11 01:31:14
>>366
基本的な計測はbenchmarkライブラリ(標準添付)でOK
あと、「Ruby プロファイラ」で検索すると色々出てくる
369:デフォルトの名無しさん
09/01/11 01:33:47
>>363
おおもとは、>>323
> (3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
だから、小数を含む数の扱いについて一通り言及すべきだと思うんだ。
370:デフォルトの名無しさん
09/01/11 01:40:08
>>365
nameに渡す文字列はARGV.shiftで受け取ったものなんですよ・・・。
グローバル変数にすればよかったりしますかね・・・。
371:370
09/01/11 01:54:40
グローバルしてみましたが結局 =~ の 左辺,右辺に変数がきてもいいのでしょうか?
372:デフォルトの名無しさん
09/01/11 02:10:29
def check(name)
/#{name}/ =~ "hiroyuki"
end
p check("hiroyuki") # => 0
373:370
09/01/11 02:17:30
>>372
ありがとうございました!!!!!!!!!うまくいきました。
=~の左辺の#{name}っていうのは変数としてみるってことですか?
374:デフォルトの名無しさん
09/01/11 02:18:34
>>368
サンクス
benchmarkクラス使ってみる
375:デフォルトの名無しさん
09/01/11 02:28:14
>>373
まあそんな感じだ
「式展開」について勉強すればよくわかる
URLリンク(www.ruby-lang.org)
376:デフォルトの名無しさん
09/01/11 02:28:22
変な質問なうえにおそらく出来ないんだろうけど一縷の望みをかけて質問
メソッドの入れ子って出来ますか?
たとえば、
def method1
処理
def method2
処理
end
end
としたら、method1だけ呼びだしたらmethod1の処理のみで終了。
method1.method2みたいに呼びだしたら両方の処理を実行、みたいな。
この書き方だと
URLリンク(www.ruby-lang.org)
みたいになっちゃうから無理なのは明白だけど・・・
method1に引数を与えてmethod2の処理をif文でくくって引数の値で処理するか否かを
決めるって方法もあるけど、見た目的にごちゃごちゃするから嫌というか・・・
なんかいい方法あったら教えてください。
377:370
09/01/11 02:31:30
>>375
ありがとございます。
昨日Rubyはじめたばっかりでいろんなサイトからつぎはぎで趣味プログラムしてたんで
リファレンスマニュアルというのをみてませんでした。まず、一読してみます!
378:デフォルトの名無しさん
09/01/11 02:32:20
>>376
無理
素直にモジュール使って、Mod1.method1としなされ
379:デフォルトの名無しさん
09/01/11 02:34:20
>>376
それではmethod2を定義しているだけで,method2を呼び出してはいない
def method1
puts "call method1"
def method2
puts "call method2"
end
method2
end
380:379
09/01/11 02:35:59
ごめんはやとちりした
381:376
09/01/11 02:45:25
>>378
無理かぁ・・・ありがと
Mo1.method1・・・method2はどこへ?
実はmethod1の処理がイテレータを含んでいて、変数を一周するたびに初期化して使うんだけど、
場合によっては初期化する前にmethod2の処理でその変数を使いたいから↑のようなことに・・・
モジュールだとダメそうなのでおとなしく引数と条件文で動かします。。
>>380
ドンマイw
382:デフォルトの名無しさん
09/01/11 02:47:47
>>376
def method1
処理1
Proc.new do
処理2
end
end
method1
method1.call
近いことを無理やりやろうとすれば、
こんなのは思いつくが、普通はやらない
端的に言って不気味すぎる
383:デフォルトの名無しさん
09/01/11 03:00:57
いやいや、初心者のこんな突拍子もないアイデアから、すごいアイデアがでたりする。
1000個に1個ぐらい。
だから初心者は1000個のアイデアを出すんだ!
384:デフォルトの名無しさん
09/01/11 03:14:53
callが気に食わない
def method1
処理1
pr = Proc.new do
処理2
end
pr.instance_eval "alias :method2 :call"
pr
end
method1
method1.method2
385:376
09/01/11 03:22:55
>>382
おお、できるんだ!?
ありがと~
ぶ、不気味なのか・・・
>>384
求めていたものが完璧に・・・お見事です。
お二方、ありがとうございます。
386:デフォルトの名無しさん
09/01/11 03:40:36
開発環境なに使ってますか?
自分はLinuxでは基本Netbeansで、ちょっとした修正はemacsで。
eclipseとかもあるけどどんな開発環境使っているか気になったので・・・。
387:デフォルトの名無しさん
09/01/11 03:59:55
vi
388:デフォルトの名無しさん
09/01/11 04:07:59
今時 vi はないだろう vi は。
俺は断然 vim だな。
389:デフォルトの名無しさん
09/01/11 04:10:20
メモ帳
390:デフォルトの名無しさん
09/01/11 04:14:26
俺はEclipseにRubyプラグイン
editer使ってる人は補完なくて大丈夫なの?
391:デフォルトの名無しさん
09/01/11 04:25:12
いや、もちろんエディタにも補完はあるよ
VimのRubyに対する補完はかなり強力。それ以上に操作性が好きで使っているけど
392:デフォルトの名無しさん
09/01/11 04:29:52
ずっとEmacs
ちなみにMatzもEmacs
まあ人に何が良いか,って聞かれたらNetbeans勧めるかもな
393:デフォルトの名無しさん
09/01/11 04:30:07
viの学習曲線の最初でくじけたのでemacsで
394:デフォルトの名無しさん
09/01/11 07:48:14
俺は断然 vi
395:デフォルトの名無しさん
09/01/11 08:18:34
あんな日本語も通らない化石エディタよく使う気になるな
396:デフォルトの名無しさん
09/01/11 08:56:02
個人用途なので基本的にはどうでもいいんですが気になるので質問します
HTMLとかから正規表現とかでデータ抜き出して、データ保管クラスのインスタンス変数に保管します。
initialize の時点でたくさんのインスタンス変数に値を入れたいんですが、
def initialize(params, data)
@a = params[:a]
@b = params[:b]
@c, @d, @e = parse_in_init(data)
end
と
def initialize(params, data)
@a = params[:a]
@b = params[:b]
make_c_d_e(data)
end
def make_c_d_e(data)
@c = someprocess1(data)
@d = someprocess2(data)
@e = someprocess3(data)
end
って、どっちが見通しいいもんでしょう?
ちょっと面倒でも明示的に代入の形を見せる前者のほうが初期化プロセスっぽく見えて好ましい?
397:デフォルトの名無しさん
09/01/11 09:03:43
>>396
YES
ただ、make_c_d_e みたいなそれっぽいのが initialize の直後に定義されてれば
「あーinitializeの続きかー」と思って読むから別に気にはしない
Util.parsehtml とかどっか遠いとこに定義されてるクラスメソッドがinitializeで呼ばれてるとやる気なくす
398:デフォルトの名無しさん
09/01/11 09:38:12
def initialize(params, data)
@params = params
@data = parse_in_init(data)
end
399:デフォルトの名無しさん
09/01/11 09:43:49
>>398
なにそのユーザー丸投げルーチン
いちいちハッシュの引数で参照するのがめんどいまたは間違いやすいからインスタンス変数にしてんじゃねの
400:デフォルトの名無しさん
09/01/11 09:45:50
>>399
@params を書き込み可能にしておけば外部からデータ追加するのも楽々だぜ?
401:デフォルトの名無しさん
09/01/11 10:09:51
>>400
外部からデータを追加する必要があって、なおかつその方法しか考えられないようなときなら一理あるけど
そうでなければ、ここでハッシュを使うのは問題が大きすぎる
402:デフォルトの名無しさん
09/01/11 10:15:06
Javascriptだと
a={'hoge': huga, 'hage': fuga};
a.hoge
a.hage
にアクセス出来ていいんだよね
403:デフォルトの名無しさん
09/01/11 10:17:30
Ruby でもやろうと思えば出来るっしょ
404:デフォルトの名無しさん
09/01/11 10:17:39
アクセサ作ればいい
めんどくさいけど
405:デフォルトの名無しさん
09/01/11 10:24:49
StructA = Struct.new(:hoge, :hage)
a = StructA.new('huga', 'huga')
p a.hoge
p a[:hoge]
p a[0]
"huga"
"huga"
"huga"
オーイエー
>>402
どっかのgemにそんなのあったな
406:デフォルトの名無しさん
09/01/11 10:44:53
来たなStruct厨
総員迎撃準備
407:デフォルトの名無しさん
09/01/11 10:51:36
Structって嫌われてんの?
408:デフォルトの名無しさん
09/01/11 11:01:58
Struct.newにJSONぶっこめる?
409:デフォルトの名無しさん
09/01/11 11:09:18
>>407
他言語から来た人がArrayやHashを使い込むことなく安易に使うものの代表だから、嫌がられてはいるね
まずはArrayとHashを使い倒してからにして欲しいなと思う所存
>>408
分けてくれ
410:デフォルトの名無しさん
09/01/11 11:38:19
>>395
通るぞ?@Solaris10
411:デフォルトの名無しさん
09/01/11 11:39:19
URLリンク(www.ruby-lang.org)
ここの検索こわれてるみたいなんだけどいつ治りますか
412:デフォルトの名無しさん
09/01/11 11:41:36
>>410
動物は一度鎖に繋がれてしまうと鎖が杭から外れていても
逃げられないと思い込んでしまうものなのです
413:デフォルトの名無しさん
09/01/11 11:42:25
>>410
それは日本語パッチ当たってるんじゃね
てか、「お前らが使ってるのは vi じゃなくて vi クローンのどれかまたは vim だろ」というツッコミを
誰かがしないと終わらんな
414:デフォルトの名無しさん
09/01/11 12:25:43
>>413
OS標準。つか、Solarisは遠い昔から、日本語localeが入ってりゃちゃんと日本語使える。(viに限らず。そのせいで痛い目にあうこともまれにあるが)
415:デフォルトの名無しさん
09/01/11 13:15:48
emacs入ってない環境はたくさんあるけど、viが無い環境は稀。
まあ開発環境は何でも好きなの自分で入れろよと思うけどな。
416:デフォルトの名無しさん
09/01/11 14:49:23
だからメモ帳最強って何度言わせるんだよ!!
417:デフォルトの名無しさん
09/01/11 14:55:18
Windows環境でJmEditorとRDEとNotepad++を使い分ける俺に隙はなかった
418:デフォルトの名無しさん
09/01/11 15:08:19
>>415のようなことを稀に聞くが、vi でファイル編集できない人間などおらん
419:デフォルトの名無しさん
09/01/11 15:21:16
Windows環境で、class Hoge(もしくは、def hoge、each do |x|)と打ってリターンをすると、
以下のように、endを付けインデントした位置にカーソルを持ってくるエディタはありますか?
class Hoge[Retrun]
↓
class A
|
end
420:デフォルトの名無しさん
09/01/11 15:25:32
Meadow(or Xyzzy)を入れて自分で作れってのはなし?
421:デフォルトの名無しさん
09/01/11 15:25:41
>>419
xyzzyをカスタマイズ
422:デフォルトの名無しさん
09/01/11 15:46:14
>>420-421
自分でカスタマイズする技量がないのであきらめます
423:デフォルトの名無しさん
09/01/11 15:53:58
Solarisのviはずいぶん昔から日本語通るぞ。SunOS4は忘れたが。
ただ、Localeに縛られるので、Shift_JISのファイルなんかが来ちゃうと面倒。
LANG=とsettermでなんとかなった気もするけど、もう忘れた。
って無駄レスだな。
424:デフォルトの名無しさん
09/01/11 16:08:58
以下、Personクラスの配列membersを、名前→性の順でソートすると、名前のソートがくずれます。
くずれないようにソートするにはどうすればいいのでしょうか?
class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
def show
[@name, @sex]
end
end
members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")
p members.map {|p| p.show }
#=> [["sasaki", "male"], ["kato", "famale"], ["fukada", "male"], ["akai", "female"]]
p members.sort_by {|p| p.name}.sort_by {|p| p.sex}.map {|p| p.show }
#=> [["kato", "famale"], ["akai", "female"], ["fukada", "male"], ["sasaki", "male"]]
#=> 望ましい結果 [["akai", "female"], ["kato", "famale"], ["fukada", "male"], ["sasaki", "male"]]
425:デフォルトの名無しさん
09/01/11 16:12:32
members.sort_by {|p| [p.name, p.sex]}
じゃね?
426:デフォルトの名無しさん
09/01/11 16:21:48
配列の比較に関してはドキュメントが弱いんだよね
[1,2,2] < [1,2,3]
[1,1,2] < [1,2,2]
[1,4,4] < [2,1,1]
x でソートしたあとに y でもソートしたいという場合は、Rubyでは
data.sort_by{|a| [a.x, a.y]}
と書く
427:デフォルトの名無しさん
09/01/11 16:28:14
>>425
それだと、
[["akai", "female"], ["fukada", "male"], ["kato", "famale"], ["sasaki", "male"]]
となり、性のソートがくずれてしまいました。
428:デフォルトの名無しさん
09/01/11 16:55:33
>>427
どうソートしたいのか考えれ
崩れるも何も、ソートする順番の問題に過ぎない
class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
def show
[@name, @sex]
end
def Person.sort_sex(sex)
if sex=='male' then 1 else -1 end
end
end
members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")
members.sort_by {|p| [Person.sort_sex(p.sex), p.name]}
429:デフォルトの名無しさん
09/01/11 17:09:06
>>428
うまくいきました。
サンクス。
430:デフォルトの名無しさん
09/01/11 18:13:53
URLリンク(diaspar.jp)
431:デフォルトの名無しさん
09/01/11 19:37:19
Hpricot::Elem.new(Hpricot::STag.new('form'))
をノコギリで書き換えようと思い
Nokogiri::XML::Node.new('form')としたら
ArgumentError: wrong number of arguments (1 for 2)
のエラーが出ました。
RDocには,new(name)、と引数は一つなのですが,どうしてでしょう。このnameはStringで与えてもだめ?
432:デフォルトの名無しさん
09/01/11 19:53:44
>>431
URLリンク(nokogiri.rubyforge.org)
第2引数はNokogiri::XML::Documentっぽい
ドキュメントが間違ってるんだろうな
433:デフォルトの名無しさん
09/01/11 22:53:05
>>419
Aptanaとか、EclipseベースのIDEならいけるんじゃないかな。
434:デフォルトの名無しさん
09/01/11 23:17:19
>>419
どうせEmacs使わんだろうけどコメントしとく
emacsのruby-electric-modeだと
defスペース
と打った時点でendが補完される
その後 ruby-mode の ruby-reindent-then-newline-and-indent を使って改行すればインデントも同時にされる
この程度ならEmacsユーザならごく当たり前のこと
というかRuby用の動作があるエディタならみんな似たようなことできるでしょ?
435:デフォルトの名無しさん
09/01/12 00:38:32
>>419
Vim の場合
runtime/ftplugin/ruby.vim
runtime/indent/ruby.vim
を調べてみたけど、そういうのなかった。
%HOME%/vimfiles/ftplugin/ruby.vim か
$HOME/.vim/ftplugin/ruby.vim に、
以下を入れておけば、OK
inoreab <buffer> module module<cr>end<up><end>
inoreab <buffer> class class<cr>end<up><end>
inoreab <buffer> def def<cr>end<up><end>
inoreab <buffer> do do<cr>end<up><end>
inoreab <buffer> case case<cr>end<up><end>
inoreab <buffer> begin begin<cr>end<up><end>
436:デフォルトの名無しさん
09/01/12 01:06:25
hash = {}
[:a, :b, :c].each {|k| hash[k] = @hash[k] }
という処理をもっと簡単に書く方法があれば教えてください。
437:デフォルトの名無しさん
09/01/12 01:14:36
hash = @hash.dup()
438:デフォルトの名無しさん
09/01/12 01:45:16
>>435
endwise.vim というプラグインがある
URLリンク(www.vim.org)
439:デフォルトの名無しさん
09/01/12 03:17:20
>>419
EclipseかNetBeansでsnipet使うのはどうだろうか?
リターンでは無理だが別のキーで、コードの展開はできるぞ
440:デフォルトの名無しさん
09/01/12 04:15:34
>>436
hash.merge!(@hash)
441:デフォルトの名無しさん
09/01/12 07:19:55
>>436
それが一番短い部類
「○○というキーを持つペアを [k, v] の配列で返す」みたいなメソッドって標準には無いんだよね
hash = Hash[@hash.find{|k, v| [:a, :b, :c].include?(k)}]
442:デフォルトの名無しさん
09/01/12 07:22:22
書いててなんか短いなとは思ったんだ
hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
うーん
443:デフォルトの名無しさん
09/01/12 07:31:20
hash という変数名は全てのオブジェクトに存在する hash っていうメソッド名と被るから、
特に拘りがあるのでなければ避けておいたほうが吉
プログラム(1行のみ):
p hash
結果:
22412530
適当なハッシュの変数名は h が人気
h と書かれていれば、ほぼ全員がハッシュかなと推測してくれる
444:デフォルトの名無しさん
09/01/12 09:09:34
遅延評価はあるから
バックくおーとみたいなのはできるかもしれない
445:デフォルトの名無しさん
09/01/12 10:04:50
ActiveRecordでsqlite3のDEFAULT CURRENT_DATEに
相当するのは何?
今,record.date = Date::todayみたいにいちいちやってるのだけど,
なんだか,もっとスマートな方法がある気がするので,質問
446:デフォルトの名無しさん
09/01/12 11:02:22
質問です。
スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
勤怠管理システムのような物を作ろうかなと考えています。
私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
Cは基本情報合格しました。
とりあえずRuby1.8をインストールしようとしましたが失敗しました。
(コンソール画面から先に進めません)
こんな初心者にお勧めのRuby書籍を教えてください。
前述の通り、インストールから失敗してしまいましたので
インストール方法も解説している物が欲しいです。
最終的に簡単なシステムを作らなければいけないので
入門系と実践系の物をお勧めいただければと思います。
どうかよろしくお願いします。
447:デフォルトの名無しさん
09/01/12 11:08:49
>>446
何をもって「失敗した」と言ってるの?
Rubyインストールしただけだったら別に開発環境が入るわけじゃないぞ。
あと使ってるOSは?
448:デフォルトの名無しさん
09/01/12 11:14:05
Ruby学習者に必要なもの(ある程度持っていると暗黙のうちに仮定されているもの)
・ OSへのある程度の習熟
・ コマンドライン操作
・ HTTPとウェブに関する基礎知識
・ データベース利用に関する基礎知識(Rails限定)
・ PerlかUNIX Cの教科書的な基礎知識
449:デフォルトの名無しさん
09/01/12 11:19:00
>>448
…持ってなくてもいいが、まあ、持ってないとひたすらに遠回りではあるな
歩行練習と自転車乗る練習を同時にするようなもんで、学習量と学習時間が倍くらいになる
>>446
本当にCで自分用プログラム作れるだけの技量があるか怪しいと思うんだが、コマンドライン操作はできるかい
450:デフォルトの名無しさん
09/01/12 11:22:55
できるだろ
Cができるってことはmakeとかも使えるってことなんだから
451:デフォルトの名無しさん
09/01/12 12:13:45
>私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。
>Cは基本情報合格しました。
Cができるなんてどこにも書いてないぞ
452:デフォルトの名無しさん
09/01/12 12:16:51
Cが出来てRUbyで着ない香具師なんていない
初心者詐称
釣り決定
453:デフォルトの名無しさん
09/01/12 12:19:53
> こんな初心者にお勧めのRuby書籍を教えてください。
>>2
454:デフォルトの名無しさん
09/01/12 12:21:46
>>446
よろしければその会社でのあなたの給料と実質労働時間を教えてください
455:デフォルトの名無しさん
09/01/12 12:23:32
>スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。
会社員だなんてどこにも書いてないぞ
456:デフォルトの名無しさん
09/01/12 12:26:23
インストールも出来ない初心者向きの本を勧めれば回答終了じゃないのか、これ。
457:446
09/01/12 12:35:30
早いお答えありがとうございます。
こちらの回答が遅くて申し訳ありません。
下で個別にもレスしますがCの実践的な開発経験はありません。
資格試験(基本情報)で問題として出されるレベルのプログラムを
一人で完成させる事はできます。
わかりにくいようでしたらプログラムの基礎の基礎(ループやメモリ)だけは
わかるズブの素人としてご指導頂ければ、と思います。
>>447
RailsをインストールするためにDOS画面にコマンドを打ち込んでも
NoFound~的文章が表示されて先に進みません。
今、手元にインストールしようとしたマシンがないので
正確なエラー文はわかりません。
インストールガイドはネット上で見つけた動画を参考にしたのですが
これもインストールするパソコンにブックマークしていたので
今この場ではわかりません。
わからない事が多くてすいません。
「これが必要」という情報があれば調べてきます。
OSはWindowsVistaです。
458:デフォルトの名無しさん
09/01/12 12:36:15
オライリーの「初めてのRuby」。まじおすすめ。
Railsやるならなんだろう?
459:446
09/01/12 12:36:27
>>448
・ OSへのある程度の習熟
ある程度、がどのくらいかわからないのですがマニュアルを見て
再インストールはできました
・ コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにログオンやログオフ、プリンタの操作を数回だけ。
・ HTTPとウェブに関する基礎知識
基礎知識なら何とか…
ウェブページが表示される仕組み程度はわかります。
・ データベース利用に関する基礎知識(Rails限定)
データベースの概念やSQL文までは一通りわかります。
>>449
図々しいのですが、持っていない人間が効率的に学習できる順番など
もしありましたら教えていただけませんか…?
>コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにコマンドライン一覧のようなマニュアルを見てやった時は
とりあえずできました。
自分用プログラムを作ったことはありません。
・ PerlかUNIX Cの教科書的な基礎知識
Perl・UNIXはわかりません。
Cの教科書的なことならわかります。(解説書も持っています)
460:446
09/01/12 12:50:45
>>450
Cの知識はありますが実践経験はありません。
makeのやり方も解説を読む限りでは理解できたのですが
そこまで辿り着けませんでした…。
>>451
試験に合格できただけなのでたぶんできないと思います。
>>452
Cもできないようです…
>>453
入門・はじめて~と付いている物が多すぎて…
一番最初に読むと良い物を教えていただけないでしょうか。
(できればインストール法が詳細に載っているとありがたい)
461:デフォルトの名無しさん
09/01/12 12:51:17
>RailsをインストールするためにDOS画面にコマンドを打ち込んでも
>NoFound~的文章が表示されて先に進みません。
>今、手元にインストールしようとしたマシンがないので
>正確なエラー文はわかりません。
インストールしようとしたマシンが使える環境になったらまたおいで
462:446
09/01/12 12:51:32
>>454
>>455
会社員ですがプログラミング職ではありません。
ずっと経理でやってきました。
自主的に基本情報を取得したところ社長がそれを聞きつけて
「手当て出すからもっと本格的に勉強しろ。
今度経理システムの作成をソフトウェア会社に依頼するから
それまでに一通りわかるようになって開発に加われ。
依頼予定の会社はRuby使うって言ってるからRuby勉強しろ
」
要約するとこんな感じです。
「とりあえず実際に使える物を作ったら覚えるだろ」という事らしい。
29歳の高卒女。情報系の学歴はなし。
実質労働時間は9時間くらいかな。
今までの仕事(経理)をする時間を引いたら毎日3時間程度。
でも来週で引き継ぎ終わるから、そしたら9時間Ruby学習に充てていい。
>>456
そういう物を教えていただけるとありがたいです。
463:446
09/01/12 13:01:04
>458
ありがとうございます。
レビューなどを見ると入門より少し難しいようなのでこれを一冊と
もっと基礎的な物がないか捜してみようと思います。
464:デフォルトの名無しさん
09/01/12 13:19:44
>>462
それはチャンスって言えばチャンスだね。でも、フルタイム学習に
あてていいとなると、失敗した時のリスクも結構大きいかも。
研修参加も可能かどうか相談したほうがいい。
環境のインストールから、ということであればまずはこのへんの本でも。
URLリンク(www.amazon.co.jp)
ただし、環境のインストールについては過剰に詳しく書いてあるけど、
言語要素についてはあまりにさらっとしてるし本質的な理解には至らない
かもしれないので、これでざっと環境を作ってサンプルとか動かして
みたら、さっさと他の方法もあたったほうがいいと思う。
あと、ギブアップするなら傷が深くならないうちにお早めに。
465:デフォルトの名無しさん
09/01/12 13:33:43
>>463
だから >>453 も言ってるが >>2 を見れ
しかし、プログラミングもできないのに SI 名乗る人たちがいるのに、
>>462 のような理由でプログラミングの勉強をしろとは、
社長はなかなかの大人物。(か、ちょっと勘違いしちゃってるのか、分からんが)
先は途方も無く長いけどがんがって下さい。
466:デフォルトの名無しさん
09/01/12 14:13:30
断ったほうがいいと思う
467:デフォルトの名無しさん
09/01/12 14:16:57
良いチャンスだとは思うが、
ちゃんとした研修を受けれないなら断るのも手か。
468:デフォルトの名無しさん
09/01/12 14:28:34
>>466
だな
自社のシステムを学習者に任せるとか根本的にありえない
こっちから人出せば開発依頼費が浮くとか勘違いしてるだけに過ぎない
469:デフォルトの名無しさん
09/01/12 14:38:27
>>468
馬鹿発見
こういうのは社長がシステム会社側に余分に数百万金積んでんの
470:デフォルトの名無しさん
09/01/12 14:45:08
なにそのお妾さんシステム
471:446
09/01/12 14:47:06
いろいろアドバイスありがとうございました。
とりあえず今から都市部の大きな本屋に行って自分に合いそうな
初心者向け書籍を探してみようと思います。
あとはみなさんのアドバイス頂いた物をネット注文予定。
最後の方、個別にお礼をレスできなくてすいません。
うちは小さな会社で社長もワンマンなので残念ながら研修や断るという選択肢はありません。
社長が大昔に配送業務を外部委託したときに超ぼったくりされた苦い思い出から
外部と提携する時は必ず社員も加える事になっています。
もし私が断ったらエクセルワードくらいしか使えない経理部長がやらされそう…
一応期間的には半年くらいは貰えるようですが、厳しい道のようですので
最悪の場合は転職の覚悟もしておくことにしますw
丁寧にいろいろありがとうございました!
472:デフォルトの名無しさん
09/01/12 14:56:09
> 外部と提携する時は必ず社員も加える事になっています
いやそんなこたわかってる(というかそんな理由しかありえん)
それでもなお、
「依頼する会社が○○で開発するから話合わせるために○○を覚えろ」
というのは完全に間違っている
というか、それでは何の解決にもなっておらず、遠からず同じ大火傷が起こるだろう
473:デフォルトの名無しさん
09/01/12 15:29:14
会社の事情も何も分からんのに、そんな脊髄反射でスレ違いな話することもなかろう
474:デフォルトの名無しさん
09/01/12 15:36:57
企業様におかれましては仕様固めるとか意思伝達スムーズにするとかのほうにリソース割いてほしいのう
開発言語なんて1ミリも知らなくていいのにっていうかむしろそっちに入り込まれると邪魔
475:デフォルトの名無しさん
09/01/12 18:21:32
>>445
created_on というカラムを作ればレコードの作成日が
勝手に残る(ようにActiveRecordが面倒みてくれる)けど、それではだめ?
476:デフォルトの名無しさん
09/01/12 18:32:32
今日さ、普段使ってるファイルでFile#flock(File::LOCK_EX)のテストしてたんだよね。
そしたらFile.open("hoge", "w")したとたん中身消えちゃって涙目になった。
477:デフォルトの名無しさん
09/01/12 18:51:39
この前、アホアホに彼女と行きましたそうしたら、奥の座敷に、芸能人が10人ぐらいいました。
その中でアホアホ鍋食べていたら、芸能人の人が一緒に飲もうよと、誘ってくれました。
凄くうれしいかたよ。
それから、毎週アホアホに言っています。
478:デフォルトの名無しさん
09/01/12 20:31:09
プログラム上でウェブサイトにpostしたいのですが、
そういうライブラリがあれば教えて下さい
479:デフォルトの名無しさん
09/01/12 20:33:41
標準の net/http
gem の httpclient
gem の Mechanize
好きなの選べ
480:デフォルトの名無しさん
09/01/12 20:38:35
ありがとうございます!
481:デフォルトの名無しさん
09/01/13 00:03:14
>>478
Mechanizeが直感的で一番かんたんじゃないかな?
わかりにくいけど
482:デフォルトの名無しさん
09/01/13 01:26:33
>>481
>Mechanizeが直感的で一番かんたんじゃないかな?
>わかりにくいけど
パラドックス?
483:デフォルトの名無しさん
09/01/13 08:38:42
おまいら高卒アラサーだと雌でも食いつき悪いのな。
どんだけ二次元嗜好なんだよwww
まあコンピュータ言語知識のあるPGやSEでも糞な仕様作るのはいくらでもあるので、ユーザ側でコンピュータ言語知識有ってもいいでしょ。
結局、IT業界って客商売だし、お金出す側の客が、システムの奥深くまで把握して金出したいって要求なんだから迷惑とか関係無いわな。
ほぼ、Cの実務知識無さそうだし、現状取り組むならrubyもCも変わらないね。
>>448に上げてある、システム開発するうえで前提と成る基礎スキルの習得がまずは必要だと思う。
依頼予定の会社のruby使用のシステムの詳細をもう一度確認したら?
Ruby on Rail使う予定というなら、
【Ruby】Ruby on Rails Part6
スレリンク(php板)l50
とか、どーぞ。
貴重な体験だと思うので、日記でも付けて、あとで書籍化でもすると、ルビー神の一人に成れて世界変わるかもしれないwww
484:デフォルトの名無しさん
09/01/13 10:32:08
>>436
>hash = {}
>[:a, :b, :c].each {|k| hash[k] = @hash[k] }
>という処理をもっと簡単に書く方法があれば教えてください。
たぶん、ない。
class ::Hash
def elems_at(*keys)
h = {}
keys.each {|k| h[k] = self[k] }
h
end
end
とでもして、hash = @hash.elems_at(:a, :b, :c)としとけ。
>>437
>hash = @hash.dup()
これは違うだろ。選択した要素だけを選び出すのであって、要素をすべてコピーするわけではない。
>>440
>hash.merge!(@hash)
上に同じ。
>>442
>hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
include? は線形探索だから、それを何度も行うのは効率悪そう
485:デフォルトの名無しさん
09/01/13 11:20:42
>>hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
>include? は線形探索だから、それを何度も行うのは効率悪そう
[:a, :b, :c]に対しての探索だから3要素ならたいしたことないんじゃないの
486:デフォルトの名無しさん
09/01/13 12:02:02
そりゃ本来のデータなんてスレに書きこまんだろ
例示のために3要素にしてるに過ぎない可能性が高い
ていうか、>>436で用が済むんだけどね
これより妥当で遅れない汎用な書き方はまず無いと思われ
基本的な記法を使い倒せる技術最強伝説
487:デフォルトの名無しさん
09/01/13 13:20:46
うん、>>436が一番、やりたいことが素直にコードになってていいと思う。
hash = [:a, :b, :c].inject({}){|h, k| h[k] = @hash[k] ; h }
こんなんもあるけど、自分ならやらない。
488:デフォルトの名無しさん
09/01/13 21:30:11
でもまあ初心者はmapとか使わずeachしか使ってなかったりするからなあ。
eachじゃない書き方があれば教えてあげるのは悪いことでもない。
489:デフォルトの名無しさん
09/01/13 22:34:17
今、ドラクエやってるんだけど、太陽の石ってどこにありましたっけ?
490:デフォルトの名無しさん
09/01/13 23:19:46
みつかりました
ありがとうございました
491:デフォルトの名無しさん
09/01/14 00:13:04
>>490
ざけんなw
492:デフォルトの名無しさん
09/01/14 01:04:46
>>436
keys = [:a, :b, :c]
hash = Hash[*keys.zip(@hash.values_at(*keys)).flatten]
これでもできるような気がするけど、自分ならやらない。
493:デフォルトの名無しさん
09/01/14 02:57:57
Time.nowを簡単に日本語で出力する方法はないでしょうか?
今は、
puts Time.now.strftime('%Y-%m-%d(%a) % %H:%M:%S')
とやっています。%aは ["日", "月", "火", "水", "木", "金", "土"][Time.now.wday]
に置き換えればよいと思いますが・・・
> ruby -v
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
494:デフォルトの名無しさん
09/01/14 03:02:36
標準ではない。そのへんはその要領で自分で書いておくれ。
495:デフォルトの名無しさん
09/01/14 03:45:37
>>494
ありがとう。適当に書いてみます
496:デフォルトの名無しさん
09/01/14 03:50:57
>>493
TimeでなくDateTimeクラスなら以下のように:
$ irb -rdate -rational -Ku -f
irb> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.5.0]"
irb> Date::const_set('ABBR_DAYNAMES', %w(日 月 火 水 木 金 土))
warning: already initialized constant ABBR_DAYNAMES # ミナカッタコトニ
=> ["日", "月", "火", "水", "木", "金", "土"]
irb> t = Time.now
=> Wed Jan 14 03:47:50 +0900 2009
irb> dt = DateTime.civil(t.year, t.month, t.day, t.hour, t.min, t.sec, Rational(t.utc_offset, 86400))
=> #<DateTime: 21209863247/8640,3/8,2299161>
irb> dt.strftime('%Y年%m月%d日(%a) %H:%M:%S')
=> "2009年01月14日(水) 03:47:50"
497:デフォルトの名無しさん
09/01/14 10:56:07
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
498:デフォルトの名無しさん
09/01/14 11:12:39
>>488
map は写像製造だし、写像を作ること以外に使うべきではない
499:デフォルトの名無しさん
09/01/14 11:33:28
498の読解力のなさは委譲
500:デフォルトの名無しさん
09/01/14 12:24:21
Array.new と Array::new の違いは何ですか?
501:デフォルトの名無しさん
09/01/14 12:40:02
>>500
字面の雰囲気
502:デフォルトの名無しさん
09/01/14 12:41:33
>>500
スクリプト作者の出身言語および硬直思考の頑な度
503:デフォルトの名無しさん
09/01/14 12:45:21
>>500
タイプ数
ネタなのかも知れんが、一応マジレスしとくと定数とかのからみで "::" を使うと
面倒引き起こす可能性が無いとはいえないから、理由が無いなら "." を使っとこ
504:デフォルトの名無しさん
09/01/14 12:56:20
メソッド起動に :: を使うことは Ruby では極めて稀というかメリットは何もないよ
他人の書いたスクリプト中で クラス::メソッド という記法を見つけたら心の中でm9(^Д^)プギャーしとくといい
自分から使う理由はないからさ
505:デフォルトの名無しさん
09/01/14 13:01:33
>>501-504
サンクス
違いはないけど、ドットを使ったほうRuby流なんすね
506:デフォルトの名無しさん
09/01/14 13:29:36
クラスメソッドとインスタンスのメソッドの呼び出し方に違いはありますか
507:デフォルトの名無しさん
09/01/14 16:59:10
rubyでアンテナサイトつくってみたいんですけど
何をしたらよいのかわかりません。
何かよい書籍とかありませんか?
実際のアプリケーション作成となると、全くわかりません。
508:デフォルトの名無しさん
09/01/14 17:01:03
>>506
ないっす
File = Class.new(IO)
def Fie.basename(...)
...
end
File.basename("aaa/bbb") # => "bbb"
クラスもClassクラスのインスタンスなもんで。
509:デフォルトの名無しさん
09/01/14 17:59:41
(゚∀゚)ラヴィ!!
510:デフォルトの名無しさん
09/01/14 18:26:19
>>507
作るな
511:デフォルトの名無しさん
09/01/14 18:35:30
まあねえ
ネットに関するプログラムは自力で学んでもらってなんぼだしな
何していいのかわからないなら作るのはまだ早い
512:デフォルトの名無しさん
09/01/14 18:56:25
アンテナみたいな、作り方によっては他人に迷惑をかけまくるものは、
「何をしたらよいのかわかりません」レベルの人間には手を出して
ほしくないね。
とりあえずもっと別のところから修行するんだ!
513:デフォルトの名無しさん
09/01/14 19:13:47
その別のところというお題で適当なものを考えてあげようか。
初心者が上達するには題材が必要だろう。
youtubeのRSSを定期的にとってきて、関心のあるキーワードに引っかかったエントリをメールで送信してくれるようなプログラム。
514:デフォルトの名無しさん
09/01/14 20:51:58
>>507
まずはHTTPの仕組み、それと既存のアンテナがどんなことやってるのかを学ぶべき
513のお題も学習に良さそうだ
ただメール送信はちょっとややこしいから、エントリの表題をシェルに表示するぐらいでいいかも
515:デフォルトの名無しさん
09/01/14 21:58:54
すいません、まだドラクエやってるんですが、竜王ってどこにいましたっけ?
516:デフォルトの名無しさん
09/01/14 21:59:53
竜王城
517:デフォルトの名無しさん
09/01/14 22:00:52
玉座の後ろの隠し階段だよ
518:デフォルトの名無しさん
09/01/14 22:12:27
ryuou.castle.search('ryuou')
519:デフォルトの名無しさん
09/01/14 22:15:02
一緒に世界征服しようとしたらバッドエンドだ、気を付けろ
520:デフォルトの名無しさん
09/01/14 22:26:02
昔ファミコンでやってた時何も知らずにバッドエンドだった時は放心した。。。
パスワードとらずにやってたから初めからやり直しだったなwww
苦い青春だったぜ
521:デフォルトの名無しさん
09/01/15 00:41:39
Mac OS X で ruby-1.9.1-rc1 をコンパイルすると、i686ではなくi386になる。
$ ruby -v
ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-darwin9.6.0]
i386用にコンパイルされていると遅いよね?
i686用にコンパイルしたいんだけど、どうしたらいい?
522:デフォルトの名無しさん
09/01/15 04:03:10
誰かrarff使っている人いますか?
523:デフォルトの名無しさん
09/01/15 07:29:43
>>520
2か3で誰かと入れ替わるイベントもあったよな。どっかの王様だっけ?
あん時はパニックになって友達に泣きついたが、あとから考えると
恥ずかしかったな。
524:デフォルトの名無しさん
09/01/15 08:41:56
古いバージョンで動いてたスクリプトを最新版で動くようにする変換機とかありますか?
525:デフォルトの名無しさん
09/01/15 10:03:15
>>524
原理的に無理でしょう
人間の手で書き換えるしかないんじゃないかと
526:デフォルトの名無しさん
09/01/15 15:20:40
>>523
3で王様になるイベントだな。
あれは最初どうにもならんでリセットしたわw
527:デフォルトの名無しさん
09/01/15 17:31:34
irb> file.scan(re[:method])
RegexpError: Stack overflow in regexp matcher
ぬう
これでカッコ多いか生意気な
528:デフォルトの名無しさん
09/01/16 04:09:51
下位互換性確保のために、古いバージョンの実行環境を残しておくのは重要。
529:デフォルトの名無しさん
09/01/16 05:16:24
Ruby 初心者スレッド Part 22
スレリンク(tech板:322番)
322 名前:デフォルトの名無しさん[sage] 投稿日:2008/10/02(木) 18:02:43
バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。
ruby -x "%~0" || pause
と書けばエラーが出たときに限ってとまる。
test.bat
ruby -x "%~0"
pause
goto :eof
#!ruby
put "hello"
530:デフォルトの名無しさん
09/01/16 05:18:42
うぉ途中で送信した
>>529について質問なのですが、
ruby -x (スクリプト名) と指定することはどういう意味があるのでしょうか?
特に -x なのですが、マニュアルを読んでも意味がわかりません。
これはバッチを実行した時にその作業ディレクトリをスクリプトのディレクトリに移動するという意味でしょうか?
531:デフォルトの名無しさん
09/01/16 05:32:56
#!ruby より上を読み飛ばすってことじゃないかな?
全体でバッチファイルになってるけど、rubyスクリプトとして実行されるのは下の2行だけっていう。
532:デフォルトの名無しさん
09/01/16 10:23:47
最近、『ケント・ベックのSmalltalkベストプラクティス・パターン』に中身が似てるっぽい
『実装パターン』て本が出ましたが、Ruby使いにとってはどちらがより役に立ちますか?
前者がSmalltalkのコードで説明してて、後者はJavaですよね。
両方読んでみた人いますか?
533:デフォルトの名無しさん
09/01/16 11:55:55
>>532
似たことが書いてありますが、SBPPは動的言語向け、IPは静的言語向けの内容なので
どちらかを選ばなければならないなら、Ruby使いにはSBPPのほうを薦めます。
もちろん、お金と時間に余裕があるならば、両方読むのが吉です。
534:デフォルトの名無しさん
09/01/16 13:30:06
>>531
あーーそういう意味か!わかりました。
batファイル自身がRubyスクリプトになっててそのまま実行できるようになってるんですね。
535:デフォルトの名無しさん
09/01/16 20:29:35
win32oleをつかってADO経由でsqlserverのテーブルに
対して読み書きを行おうと思っています。
connectionオブジェクトのゲットは出来ました。
recordsetオブジェクトのゲットも出来ました。
recordsetの各feilds("項目名").valueに値をセットして
updateメソッドで反映出来るのも確認できました。
「よし、出来た」
そう思ったのもつかの間。
「テストテーブルだけど初期値(null)に戻しておくか」
そう思った時に壁につぶかりました。
rsTest.feilds("項目名").value = nil
こうすると例外が出てしまいます。
初期値(null)が入っている時は
p rsTest.feilds("項目名").value
結果:nil
になったのですが…。
DBのnull≠nilで初期値がp関数でnil表示されるのは
型が返還された結果だというのはおぼろげながら
想像はつくのですが、ではADOのFeildオブジェクトに
nullをセットするにはどうしたらいいのでしょうか?
レコードセットでの操作を諦めてSQL文で操作した
方がいいのでしょうか?
環境
OS:WINDOWS2000 rubyのバージョン1.8
536:デフォルトの名無しさん
09/01/16 21:10:26
うちはnilで出来てる
537:デフォルトの名無しさん
09/01/17 00:01:52
ADOのconnectionが作れたならSQL発行すればいいじゃん
538:535
09/01/17 02:06:05
>>536
nilのままでOKなんですか。
となると呼び出し方がおかしいとか
バージョンとかの相性の問題ですかねぇ
>>537
最終的にはそうなりそうです。
ただ、nil以外は値をちゃんと設定できるだけに
何か手順があるのかなと思いまして。
まぁ、ちょっと悔しくてなんとか
足掻けないかなぁと思っただけなんです。
539:デフォルトの名無しさん
09/01/17 06:38:14
URLリンク(ml.postgresql.jp)
540:デフォルトの名無しさん
09/01/17 06:50:04
URLリンク(www.vbalab.net)
541:デフォルトの名無しさん
09/01/17 07:13:16
URLリンク(www.atmarkit.co.jp)
542:デフォルトの名無しさん
09/01/17 07:49:14
>>533
ありがとうございます。参考になりました。
543:535
09/01/17 09:43:17
>>539-541
ありがとうございます。
Ruby側じゃなくて、ADOサイドの問題の可能性が高そうですね。
色々試してみます。
544:デフォルトの名無しさん
09/01/17 10:28:41
テーブルの定義の問題だと思う
545:デフォルトの名無しさん
09/01/17 11:11:32
自分のコーディングが怪しいと思わないところが問題だと思う
546:デフォルトの名無しさん
09/01/17 14:14:56
PStore.new('test.pstore').transaction(read_only=true) do |pstore|
...
end
の read_only=true がただのメソッド説明用の表現であり、
実際は引数に true を渡す普通のアレだということを数年使ってきてやっとさっき気づいた
PStore.new('test.pstore').transaction(true) do |pstore|
...
end
pstore の時だけなんか引数で代入?みたいな特別な記法があるんだなーとずっと思ってた
547:デフォルトの名無しさん
09/01/17 15:01:17
特別な記法はある
548:デフォルトの名無しさん
09/01/17 15:49:46
>>547
特定のクラスだけ通用する記法みたいなのは特にないよ
返り値が評価されるだけだ
549:デフォルトの名無しさん
09/01/17 16:06:28
いや、トップレベルに read_only= という関数的メソッドを定義するライブラリかもしれないじゃないか
550:デフォルトの名無しさん
09/01/18 03:57:37
KDE3 の korundum.rb にはあった、KDE モジュールの ListView クラスと ListViewItem クラスが、
KDE4 の korundum4.rb にはありません。
これは何か別のクラスで置き換わったのでしょうか。
よろしくお願いします。
551:デフォルトの名無しさん
09/01/18 15:25:00
ちょっとした質問があります。
UTF-8(BOM付き)とUTF-8n(BOMなし)を判別する簡単な方法はありませんでしょうか?
NKF.guess だと 両方とも 5(=UTF8) としか帰ってこず、
判別できませんでした。
552:デフォルトの名無しさん
09/01/18 15:28:41
対象をUTF-8のBOMと照合したらいいじゃまいか
553:デフォルトの名無しさん
09/01/18 15:29:45
BOMとマッチさせるだけだよなぁ。
554:デフォルトの名無しさん
09/01/18 15:55:56
特定のウィンドウやソフトから流れる音楽の音量を音楽編集ソフトで音量増幅したようにリアルタイムで増幅したいのですが。
ルビーでできますか。どのような方法で可能なのですか。
555:デフォルトの名無しさん
09/01/18 16:09:01
>>554
できるとしてもRubyとしての仕事ではなく、
他のプログラムのコア部分に処理を形通り依頼する(データを丸投げして呼び出す)というやり方になる
Rubyは関係ないな
556:デフォルトの名無しさん
09/01/18 16:16:20
>>550
一応答える
知らんがな
KDEスレのほうがたぶん変更理由とかに詳しいと思われ
557:デフォルトの名無しさん
09/01/18 16:26:36
>>554
OSやウィンドウ(アプリ)が何なのかによるんじゃないの?
↓LeopardでAppleScriptを介してiTunesのボリュームを変える
とか書かれても参考にならんでしょ?
require 'osx/cocoa'
include OSX
def iTunesVolume(volume)
script = NSAppleScript.alloc.initWithSource <<-EOF
tell application "iTunes"
set sound volume to #{volume}
end tell
EOF
error = OCObject.new
script.executeAndReturnError(error)
end
558:デフォルトの名無しさん
09/01/18 16:33:04
>>556
そうですか。すまんす。
KDEスレを探してみます。
559:デフォルトの名無しさん
09/01/18 17:21:34
>>557
特定の曲だけにしたいんです
560:デフォルトの名無しさん
09/01/18 18:04:17
.wavとか.mp3とかの元データを変えずに、
再生中に特定の曲だけボリュームを上げたいってことか。
561:デフォルトの名無しさん
09/01/18 18:06:14
Windowsなら腐るほど該当アプリケーションあるけどな
562:デフォルトの名無しさん
09/01/18 18:21:32
>>560
>>561
その方は私の質問に便乗している方ですのでお間違いないように。
私の希望はあくまでも、ウィンドウやソフトから流れる音をミュート以上にリアルタイムで増幅する方法です。
>>555
>>557
そうですか..。
いや、SDLとかいうルビーのゲーム用ライブラリーで音楽が扱えていたことと、
パソコン上で再生された音や特定のウィンドウの音を録音できるフリーウェアがたくさんあったので、そんなに難しいことではないのかなと質問させていただきました。
ミュートの調整による増幅以上に増幅する方法をさがしているので。
563:デフォルトの名無しさん
09/01/18 19:10:47
意味が分からない
564:デフォルトの名無しさん
09/01/18 19:25:49
>>562
他のフリーウェアがどうやってるのかは分からないが
Ruby覚え立てでスパッと出来るほど簡単なものではない
OSによってもやり方が違うし
565:デフォルトの名無しさん
09/01/18 19:52:49
ミュートの意味がおかしくね?
566:デフォルトの名無しさん
09/01/18 20:37:45
>>562
出来ないから諦めろ、て言われたら諦めてくれる?
567:デフォルトの名無しさん
09/01/18 21:30:31
>>564
OSはウィンドウズです。
>Ruby覚え立てでスパッと出来るほど簡単なものではない
そうですか?初心者向けと聞きましたが。
それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。
>>566
分かる人を待ちますよw
568:デフォルトの名無しさん
09/01/18 21:32:54
このスレは成りすましお断りですよ
569:デフォルトの名無しさん
09/01/18 21:44:28
>>567
初心者向けだと言ったやつに聞けばいいのでは?
特定のアプリを外部制御するならまだしも
Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
570:デフォルトの名無しさん
09/01/18 21:50:22
タスクトレイにある「音量」をいじればいいよ。
それと同等の操作ならRuby初心者でもできるだろうけど
それ以上を求めるなら間違いなく待ちぼうけになる。
571:デフォルトの名無しさん
09/01/18 21:54:19
>>569
>特定のアプリを外部制御するならまだしも
>Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
pcに流れる音全体でもいいですよ(できれば個別にですが)。
ただリアルタイムで音量を増幅できれば。
それとフリーの録音かソフトが個別の音を録音できていることから考えると、
pc上に流れた全ての音がミックスされてスピーカーで流れているだけで、
スピーカーから流れる前段階のどこかで、個別の音声はプログラムで取得する方法があるような気がします。
572:デフォルトの名無しさん
09/01/18 21:56:21
よくわからないが,>>561や>>567を見ると煽りたくなる衝動に駆られる
この気持ちどうしよう
573:デフォルトの名無しさん
09/01/18 21:56:27
だから、できるって
ただし、Rubyは無関係
他のサウンドとOSの深いとこを触るドライバやライブラリを直接いじるしかない
そのいじり方を学んでから、Rubyで通信する方法を聞きに来な
574:デフォルトの名無しさん
09/01/18 22:05:26
>>567
>そうですか?初心者向けと聞きましたが。
Rubyは初心者向けかもしれんが
お前がやろうとしていることは、確実に上級者向けどころか前人未踏に近い領域だ
> それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。
他の人も散々言ってるように、それは「Rubyの」初心者質問スレで解決できる質問じゃない
素直に諦めてくれ
575:デフォルトの名無しさん
09/01/19 03:00:31
>>567
できりょ。
・Rubyをインストールする
・Vistaをインストールする
・タスクトレイから音量ミキサを開く
・アプリケーションごとの音量を調整する
な?簡単だろ?
ちなみに、Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。
そもそも、Win32をゴリゴリやるのは向かないだろ。
C#(.NET)とかC++の方がまだ向いてる。
576:デフォルトの名無しさん
09/01/19 04:25:20
>Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。
mjsk
kwsk
577:デフォルトの名無しさん
09/01/19 05:10:11
>・Rubyをインストールする
>・Vistaをインストールする
>・タスクトレイから音量ミキサを開く
>・アプリケーションごとの音量を調整する
これは上から順に見てワロタwww
上から順にしようとしたらできない事書いてあるし久々オモローwww
578:デフォルトの名無しさん
09/01/19 08:55:50
オモローって自分から使ってる人久しぶりに見た
579:デフォルトの名無しさん
09/01/19 09:39:59
rubyのRPMを探しているのですが、見つかりません
どこにありますか?
580:デフォルトの名無しさん
09/01/19 09:53:00
>>579
最新のものにこだわらなければ、
大抵のLinuxディストリなら標準で入ってるんじゃね?
OSと、欲しいRubyのバージョンは何?
581:デフォルトの名無しさん
09/01/19 11:22:21
yum install ruby で入らないのか?
下手に探すより環境をしっかりさせろ。
582:デフォルトの名無しさん
09/01/19 11:23:09
yum じゃなければ apt-get
583:デフォルトの名無しさん
09/01/19 11:56:52
1.8.6に1.8.7のinjectでのシンボルによる二項演算子指定を実現するのは以下でいいと思います?
class Symbol
def to_proc
proc { |obj, *args| obj.__send__(self, *args) }
end
end
module Enumerable
alias _inject inject
def inject(*init, &block)
if not block
begin
return _inject(&init[0])
rescue
return _inject(init[0], &init[1])
end
end
_inject(*init, &block)
end
end
584:デフォルトの名無しさん
09/01/19 18:14:58
emacs(meadow)でRuby書くときにこれこそ入れておけっていうelispありますか?
ruby-modeとruby-electric位しかruby周辺は入れてません.
585:デフォルトの名無しさん
09/01/19 18:35:54
ハッシュってキーもバリューも日本語いけるんだな!ちとおらびっくりしたぞ!
586:デフォルトの名無しさん
09/01/19 22:16:48
激しく実行環境依存で嵌まりそうだけどな。
587:デフォルトの名無しさん
09/01/19 22:24:07
可搬性がなければならないプログラムを作らなければならない必要性というのは
現代のRuby用途では意外と低い
588:デフォルトの名無しさん
09/01/19 22:58:55
自分んとこ(か、日本語が通ることが確定してる特定の環境)で使っておしまいというスクリプトのほうが多いな、確かに
外に出すんでなけりゃ日本語使ってもいいと思うけどね
日本語べったりになってるとアルファベットでどう書くか悩むことになるけど
589:デフォルトの名無しさん
09/01/19 23:01:44
形態素とか使ってたら日本語使った方が簡単そうだな
590:デフォルトの名無しさん
09/01/20 00:22:14
Ruby1.8.6です。REXMLのverは3.1.6です。
URLを与えたらそこから文書を抜き出してきて、それをyahooの形態素解析にかけるとXML形式でレスポンスが返るので
それをREXMLで解析するプログラムを作ったのですが、
wikipedia(全体ではなく開けるものもある)やその他一部のページで、REXMLの解析中にParseExceptionエラーが起きてしまうのですが、
エラー文を見ても意味がよく分からなく、同じような症状?が出た方も中々いないようなのでお手上げです。
以下エラー文です。
#<REXML::ParseException: Declarations can only occur in the doctype declaration.
Line:
Position:
Last 80 unconsumed characters:
<!doctype html public "-//W3C//DTD HTML 4.01//EN" "URLリンク(www.w3.org)
591:デフォルトの名無しさん
09/01/20 00:32:17
明らかにXMLじゃないじゃん、それ
Yahooからの返事がXMLじゃないエラーか何かなんだと思うよ
592:デフォルトの名無しさん
09/01/20 00:35:52
!DOCTYPE宣言が二重になってるとかなんだろうな
593:590
09/01/20 01:51:53
>>591
エラーでしたら400等が表示されるはずなのですが、、
>>592
二重になるのってどこが問題なんですかね..
594:デフォルトの名無しさん
09/01/20 02:07:54
>>593
400等が表示って、ちゃんとHTTPレスポンスヘッダはチェックしてる?
595:デフォルトの名無しさん
09/01/20 02:09:06
しまった脊髄反射的なレスだった。
とりあえずREXMLに食わせるまえにファイル出力してみればいいよ。
596:デフォルトの名無しさん
09/01/20 02:33:58
エラーになるURL晒すのが早いと思うが
597:デフォルトの名無しさん
09/01/20 04:34:23
ネット系の問題に自分でデバックすら出来ないレベルか。なんか目的にたどり着くのは無理っぽい。
いつも使う必須のスクリプトが環境依存で引っ越して問題が出るのは良くある事。
まあその時に必要に迫られて書き直すと見通しよく成っていいプログラムに成る事は多いが。車輪の再生産気味だが。
598:デフォルトの名無しさん
09/01/20 06:11:08
リファクタリングが車輪の再生産って言われるとやる気なくします><
599:デフォルトの名無しさん
09/01/20 06:25:09
>>593
ステータスコードが200だからといって信頼していいわけじゃないぞ
600:デフォルトの名無しさん
09/01/20 08:21:46
ruby 1.8.6 WindowsXP SP3です。
実例ではないのですが、100までの数をカウントするプログラムに、
標準入力から入力された数字を現在の数字に足す機能を加えたいと思っています。
色々調べたところ、スレッドというものを使えばよいのかな、という結論に達したので
以下のようなプログラムを書いてみましたが、思うような動作をしてくれません。
どなたかお知恵を貸していただけないでしょうか?
j = 1
t = Thread.new do
while (j < 100)
sleep 1
p j.to_s
j += 1
end
end
while (j < 100)
i = gets.chomp
j += i.to_i
end
601:デフォルトの名無しさん
09/01/20 08:41:42
これは・・・