Ruby 初心者スレッド Part 46

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお

前スレ
Ruby 初心者スレッド Part 45
http://hibari.2ch.net/test/read.cgi/tech/1311700060/


るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
2デフォルトの名無しさん:2011/10/05(水) 13:52:45.05
ゴミ
3デフォルトの名無しさん:2011/10/05(水) 15:03:59.61
>>1
おつ!
4デフォルトの名無しさん:2011/10/05(水) 15:28:39.77
>>1
5デフォルトの名無しさん:2011/10/05(水) 17:38:31.51
Railsの話題はWebProg板のRailsスレで
http://hibari.2ch.net/test/read.cgi/php/1311050686/
Windowsスレ
http://hibari.2ch.net/test/read.cgi/tech/1155031689/

書籍:ほぼ公式
「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」 (プログラミング自体が初めてでない人向け)
http://www.amazon.co.jp/dp/4797357401/
「初めてのRuby」 (同上)
http://www.amazon.co.jp/dp/4873113679/
書籍:紙のマニュアルに相当
「Rubyレシピブック 第3版 303の技」((脱)初心者向け基礎テクニック集、1.9対応)
http://www.amazon.co.jp/dp/4797359986/
「プログラミングRuby 第2版 言語編」(初心者向け参考書)
http://www.amazon.co.jp/dp/4274066428/

現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.2 の2系統が存在
肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。両対応させるには相応の追加記述が必要
1.9.2 用の教科書があるなら 1.9.2 から始めても構わないが、1.8 用のスクリプトやライブラリは 1.9.2 では動作しないので注意

Windows用Rubyは、Ruby以外のものもあらかた入っているActiveScriptRubyと
http://www.artonx.org/data/asr/
RubyだけインストールされるRubyInstallerの2種類存在
http://rubyinstaller.org/downloads/
何が必要なのかわからない人はとりあえずActiveScriptRuby使っと毛
chm(HTMLヘルプ)式のダウンロードできるマニュアルが便利
http://www.ruby-lang.org/ja/documentation/
6デフォルトの名無しさん:2011/10/05(水) 17:52:24.43



          Railsは板違い



と書いておけば目立つだろうか
日常的に使ってる人も少ないし、初心者に教えられるような人も少ないので、
素直に専門でやってる人の集まるWebProg板に行ったほうが吉
7デフォルトの名無しさん:2011/10/05(水) 18:14:07.95
>>6
WebProg板のRailsスレは
クソが自分のブックマークをスパム投稿し続けてて機能していないんだよ

【RoR】Ruby on Rails Part12
http://hibari.2ch.net/test/read.cgi/php/1311050686/
8デフォルトの名無しさん:2011/10/05(水) 18:43:05.06
機能してないってほどではないけど
むしろ最近超絶教えて君が毎日やって来るのが超絶ウザい
Railsボットお断りスレとRails初心者スレが必要だな
9デフォルトの名無しさん:2011/10/05(水) 18:56:26.94
あんまりム板の管轄ではないというのは事実
誘導先の板のスレがどうなってるかは、そりゃ、その板とそのスレの自治だろう
10デフォルトの名無しさん:2011/10/05(水) 19:12:26.52
Railsの質問に来る人なんて1スレに数回くらいなんだから、そのたびに誘導してやりゃいいだけじゃん
11デフォルトの名無しさん:2011/10/05(水) 22:15:03.84
配列を配列の配列にするのって簡単にできる?
[1,2,3,4,5,6]を[[1,2],[3,4],[5,6]]みたいにしたい
12デフォルトの名無しさん:2011/10/05(水) 22:23:21.81
>>11
こんな感じ?
[1, 2, 3, 4, 5, 6].enum_slice(2).to_a
13デフォルトの名無しさん:2011/10/05(水) 23:05:12.29
>>12
まさしくそれ!ありがとう
そうかArrayだけじゃなくてEnumerableも探さなきゃいけないんだな
14デフォルトの名無しさん:2011/10/06(木) 18:22:15.44
a,$b,c=1,2,3

puts "a,$b,c".split(",").map{|i| "#{i}=#{eval i}"}.join(",")

# ==> a=1,$b=2,c=3

このデバッグプリント関数なんとかラップできないですか
15デフォルトの名無しさん:2011/10/06(木) 18:34:22.63
()必須になる上にevalは消しようがないのか…

def dbputs(s)
 puts s.split(',').map{|i| "#{i}=#{yield i}"}.join(',')
end

dbputs("a,$b,c"){|i| eval i}
16デフォルトの名無しさん:2011/10/06(木) 18:46:41.62
>>10
本来は>>1に書いてあったんだよ
17デフォルトの名無しさん:2011/10/06(木) 19:23:19.74
ソケット通信のコードの解説をお願いいたします
so = TCPSocket.open(ip,port)
s.print "文字列"
s.each("\0") do |line|
p line
end

3行目のs.each("\n") do |line|がよくわかりません
eachのカッコ内の\nは何の意味がありこれを書くことによってどのようなことが行われるのでしょうか?
18デフォルトの名無しさん:2011/10/06(木) 19:35:19.72
def dbputs(&blk)
puts blk[].split(",").map{|i| "#{i}=#{blk.binding.eval(i)}"}.join(",")
end


a,$b,c=1,2,3

dbputs{ "a,$b,c" }

見た目違和感あるけどこんな感じなら
19デフォルトの名無しさん:2011/10/06(木) 20:20:47.02
20デフォルトの名無しさん:2011/10/06(木) 21:29:38.35
a,$b,c=1,2,3
class Binding
def dbputs(s)
puts s.split(",").map{|i| "#{i}=#{self.eval(i)}"}.join(",")
end
end
binding.dbputs("a,$b,c")
なんちゃって

JRubyで実装しにくいから却下されたという
Binding.of_callerが必要になるやつだねぇ
もしあればdbputs("a,$b,c") ですませられるのだろうけど
現状だと、何らかの方法でbindingを渡さないとならん
21デフォルトの名無しさん:2011/10/07(金) 19:49:55.26
文字列の最後の文字が特定のものだった場合、それを消すという処理をしたいのですが

if s[s.split(//u).length] == "/"
s= s.split(//u)[0..-2].join
end

上記でやっても上手く処理されません。
文字列は2バイト文字で、中に記号なども含まれます。
文字コードはUTF-8です。

22デフォルトの名無しさん:2011/10/07(金) 19:56:00.17
irb> puts "ねここ".chomp("こ")
ねこ
23デフォルトの名無しさん:2011/10/07(金) 20:00:06.70
こんなにも…あっさり…
検索しながら1時間以上悩んでたのが馬鹿みたいでした。
どうもありがとうございます。
24デフォルトの名無しさん:2011/10/07(金) 20:08:29.11
結構トリッキーじゃね?
"こ"を改行とみなして取り除くって
25デフォルトの名無しさん:2011/10/07(金) 20:11:17.26
irb> puts "ねここ"[-1]
26デフォルトの名無しさん:2011/10/07(金) 20:22:30.74
>>24
違う
String#chomp は引数文字列を末尾から取り除いて新しい文字列を返す(末尾が該当しなければ、なにもしない)というメソッド
引数が無かった場合、$/ を取り除こうとする
さらに、$/ がデフォルトの $/ と同様だった場合には、特別に \n と \r と \r\n の3種類を対象とする

perl の chomp とはコンセプトからして既に別物
27デフォルトの名無しさん:2011/10/07(金) 20:37:25.37
x.sub!(/¥/¥z/, '')
28デフォルトの名無しさん:2011/10/07(金) 21:03:53.86
>>26
そうなのか
またるりまに騙されたぜ
29デフォルトの名無しさん:2011/10/07(金) 21:07:44.33
9割以上が、引数付けないで、改行を削除するのに使ってると思うけど
30デフォルトの名無しさん:2011/10/08(土) 03:51:46.56
Perlのchompがそうだからな
chopもあるよ
31デフォルトの名無しさん:2011/10/08(土) 10:43:49.08
>>29-30
実際に使われている用法がどう、という話ではない
メソッドの定義と記憶法の話
「chompは文字列末尾に改行があれば取り除く」と覚えていた場合、5分で>>22はまず出てこない
これは明らかに「String#chompは引数文字列(がなければ改行)を末尾から取り除く」と記憶していたということだろう
そして、たぶん、そのほんのちょっとの手間で大幅に融通がきく

String#subと正規表現使うほうが汎用的でなおかつ生まれて初めて見るchompの引数つき動作なんかより一般に一発で理解されるんじゃねーかとかいう話は
めんどくさい比較になるので今回はしないw
32デフォルトの名無しさん:2011/10/08(土) 10:53:45.65
…まあ、String#chomp 自体、あんまりいいデフォルト動作規定ではない
いわゆる chomp の動作にするためだけにすっごい頑張った形跡がありありと見える
引数なしの時に $/ が関わっているということを知ってる人がどれだけいるのやら
33デフォルトの名無しさん:2011/10/08(土) 11:13:19.55
Perlとか1.6のchompを知ってる人にそういうこと言うのはアイタタだぞ
34デフォルトの名無しさん:2011/10/08(土) 11:41:58.50
古いgemをcleanupしようとしているのですが

You have requested to uninstall the gem:
rake-0.8.7
RedCloth-4.2.8 depends on [rake (~> 0.8.7)]
jk-ferret-0.11.8.3 depends on [rake (>= 0)]
rack-1.3.4 depends on [rake (>= 0)]
rack-mount-0.8.3 depends on [rake (>= 0)]
railties-3.1.1 depends on [rake (>= 0.8.7)]
sprockets-2.0.2 depends on [rake (>= 0)]
thor-0.14.6 depends on [rake (>= 0.8)]
treetop-1.4.10 depends on [rake (>= 0)]
といわれます。
インストールされているのはrake (0.9.2, 0.8.7, 0.8.3)なので、
RedCloth等の依存を0.9.2にしたいのですが、その方法を教えてください。
gem updateを試したのですが、変化ありませんでした。

ちなみに(~> 0.8.7)とか(>= 0.8)の意味は?必要とされるバージョンだと思っているのですが?
環境は
- RUBYGEMS VERSION: 1.8.11
- RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

35デフォルトの名無しさん:2011/10/08(土) 12:28:05.76
根本的には該当ライブラリ本体を対象gemで動作するように書き換えるしかない
バージョン番号さえ書き換えれば動くということがわかっているのならredcloth.gemspecのバージョン番号を書き換えればいい

でもたぶん動かないと思う
36デフォルトの名無しさん:2011/10/08(土) 12:33:48.49
>>34
依存してるのなら残しておいたらいいじゃまいか
>= 0.8.7は0.8.7以上
~> 0.8.7は0.8.7以上0.9未満
37デフォルトの名無しさん:2011/10/11(火) 09:47:48.57
凄い初歩的な質問で恐縮なんですが、例えばtest.rbの中身を
print "こんにちは世界!"
にしたとして、これを実行するにはどうすればよいのでしょうか?

とりあえずrbをC:\Ruby192\bin\Ruby.exeに関連付けて実行すると
一瞬だけcmd.exeが立ちあがって消えてしまいます。
とりあえずbatを作って、そこに
ruby test.rb
pause
と書いて、これを実行するとcmd.exeは立ち上がるのですが
test.rbがuft-8だと文字化けしていて、Shift-JISだとエラー文がでます。
エラー文の方が対応できると思い表示された
rb:1: invalid multbyte char (US-ASCII) これから検索して1行目に
# -*- coding: utf-8 -*- を挿入すると今度は
rb2: invalid multbyte char (UFT-8)
と出てきて、よしそれならと文字コードをUFT-8に変更してみたのですが
やっぱり文字化けしています。

質問内容は1段落目になります。win7を使っています。
どうかよろしくお願いします。


38デフォルトの名無しさん:2011/10/11(火) 10:55:42.94
いちばん説明めんどくさいパターンだな
まず、どうでもいいレベルだが、Rubyでは文字列の出力はprintよりはputsを使う
出力末尾の改行を精密に制御しなければならない場合にのみ、printを使う
(だから、Rubyユーザーはprintがあるとその文字列の改行の処遇に注目する)

WindowsでRuby1.9.2を使ってるようなので、コマンドプロンプトへ出力される日本語文字列のEncodingはWindows-31Jでなければならない
まあ、Shift_JIS名義でも困ることは少ないんだけど(ないわけではない)

スクリプトファイルに記述される日本語そのものは、マジックコメントと合致さえしていればなんでもよい
# -*- coding: Windows-31J -*- とマジックコメントして日本語を Windows-31J で書こうが、
# -*- coding: Shift_JIS -*- とマジックコメントして日本語を Shift_JIS の範囲だけで書こうが、
# -*- coding: utf-8 -*- とマジックコメントして日本語を UTF-8 で書こうが、実行に問題はない

ということで、必要なのは、出力する文字列オブジェクト(Stringオブジェクト)のEncodingをWindows-31Jに変換する手段
これには String クラスの encode メソッドを使う

# -*- coding: utf-8 -*-
puts 'こんにちは世界!'.encode('Windows-31J')

んで、ダブルクリックしても黒い画面が一瞬出るだけ問題は結構根深いんだけど、
ふつうは、コマンドプロンプトを開いておいて、ruby aaa.rb と打ち込んで実行して、次回からは↑キーで履歴呼び出してそのままEnterしたりする
実行のたびにマウス持って aaa.rb をダブルクリックなんて普通はしない
39デフォルトの名無しさん:2011/10/11(火) 11:03:35.88
いつになったらユニコード出力に対応するのか
40デフォルトの名無しさん:2011/10/11(火) 11:13:40.00
それはまいくろそふつさんにきいてください
41デフォルトの名無しさん:2011/10/11(火) 11:21:25.71
いやいや、ずっと前に作ってあるのに取り込まれてないでしょ
42デフォルトの名無しさん:2011/10/11(火) 11:23:39.00
MSはUNIX使いから忌み嫌われているからしょうがない
http://www.nicovideo.jp/watch/sm15813976
43デフォルトの名無しさん:2011/10/11(火) 11:25:52.90
win32-unicode-testとか何だったのか
44デフォルトの名無しさん:2011/10/11(火) 12:23:18.93
>>38
文字コードのそれぞれの対応文字も理解していないと厳しいのですね。
なぜかUTF-8では殆どの日本語が使えるイメージでしたが
'.encode('Windows-31J')をしないと駄目という事で、なるべく日本語は使わない方向で頑張ってみます。

また、UTF-8でもアルファベットと半角記号だけできちんと処理できない場合があったので
おとなしくShift-JISを使っていこうと思います。

ただ、これでないと駄目っていう文字コードが無い事をしれて良かったです。
ゆっくりになりますが、少しずつ文字コードを学んでいきたいと思います。
ご丁寧にありがとうございました。
45デフォルトの名無しさん:2011/10/11(火) 12:31:19.78
nanocとかJekyllみたいな静的サイト作るものを探しているんですが
ruby1.9.2(+windows)での使用感などの情報がまとまってるとこ知りませんか
46デフォルトの名無しさん:2011/10/11(火) 12:33:41.89
そんなんめんどくさいし、毎回深く考えてる人なんてまずいないし、エディタ任せでいいよ
ファイルが「Shift_JISで保存」されるならマジックコメントはWindows-31Jで、コマンドプロンプト出力時の変換は不要
ファイルが「UTF-8で保存」されるならマジックコメントはUTF-8で、コマンドプロンプト出力時の変換は全ての文字列に対して .encode('Windows-31J')
いちいち .encode('Windows-31J') って書くのめんどくさい場合はファイルの保存自体をWindows-31J(一般的なエディタではShift_JIS)にしておくのが常道

めんどくさくない変換には別な方法もあるけど、ぶっちゃけ理解を先伸ばしにして負債になるだけなので今はおすすめしない
47デフォルトの名無しさん:2011/10/11(火) 12:44:37.11
>>46
わざわざありがとうございます。そのようにしていこうと思います。
48デフォルトの名無しさん:2011/10/11(火) 12:52:25.05
いろんなgem使うなら内部はUTF-8にしといたほうが結局は楽
49デフォルトの名無しさん:2011/10/11(火) 13:24:48.87
>>45
nanocとかには興味はあるんだけど、日本語リソースは見たことがないな
自分で使うしかあるまい
50デフォルトの名無しさん:2011/10/11(火) 15:34:51.87
Windowsで趣味でしかRubyを使ってないので
すべてcp932で書いてるんですが
WindowsでRubyのお仕事してる人はどうしてるんでしょうか?
コマンドプロンプトでUTF-8の入出力するのは面倒そうだなぁ

使ったこと無いけど
EmacsとかVimとかEclipseとかだと大丈夫なんでしょうか
51デフォルトの名無しさん:2011/10/11(火) 16:52:04.74
コマンドプロンプトを経由することが致命的な用途にはRubyはそもそも使わないと思うなあ
52デフォルトの名無しさん:2011/10/11(火) 17:13:00.24
>>49
個人ブログで数件だけですねnanoc
Getting Startedしかやってないけどよさげではある

1.9.2だとなぜかcompile遅いのが気になるけど
他のドキュメント読みつつやってみます
53デフォルトの名無しさん:2011/10/11(火) 17:27:46.80
-Ecp932:utf-8だけで済むなら楽なんだけど
波ダッシュとかあるしねえ
54デフォルトの名無しさん:2011/10/11(火) 21:07:34.00
1.9.3見たら、rb_w32_write_console入ってたわ
これでwindowsでもおkじゃん
55デフォルトの名無しさん:2011/10/11(火) 22:27:30.85
undefined method 'each_line' for #<Array:0x3242c90>

とでるんですが、どういう意味でしょうか?
56デフォルトの名無しさん:2011/10/11(火) 22:37:27.32
Array(配列)にeach_lineなんてメソッドは定義されてませんよという意味
StringやIOには定義されてるので
"abc\ndef\nghi".each_line{|line| puts line }
とか
open(FILENAME){|f|
 f.each_line{|line| ... }
}
ならOK
57デフォルトの名無しさん:2011/10/11(火) 22:38:07.73
そのままです
Arrayには each_lineメソッドが定義されてません
(にもかかわらずArrayオブジェクトのeach_lineメソッドを呼び出そうとしていますエラー)

Array.new.each_line や [].each_line
などとすれば同じエラーが出ます

エラーの出た行にある hogehoge.each_line みたいな記述があり
その hogehoge にArrayが入っています
hogehogeの中身がどこからやってきたのかチェックしましょう
58デフォルトの名無しさん:2011/10/11(火) 22:52:35.94
>>56,57
ありがとうございます
では配列にeach_line的なこと(C#のforeach?)をするにはどうするんでしょう?

コピペしたソースが
header_list.each do |header|
ってなってたんですが、配列にメソッド追加とかできるんですかね?Rubyって
59デフォルトの名無しさん:2011/10/11(火) 23:08:04.37
ごめんなさい、エラーだしてたところが違いました

include WEBrick
req = HTTPRequest.new(@config)
req.parse(sock)<=====================ここ

ははは、お手上げです
60デフォルトの名無しさん:2011/10/11(火) 23:10:54.26
ははは
帰れ
61デフォルトの名無しさん:2011/10/11(火) 23:51:44.18
ある関数で

@header = ....

とインスタンス変数?に代入されてて、
その関数から戻ったら @headerがnil になってるんですが、原因として何が考えられますか?
62デフォルトの名無しさん:2011/10/12(水) 00:00:02.48
実は代入してないかnilを代入してるか
63デフォルトの名無しさん:2011/10/12(水) 00:25:05.55
これなんですか?

=>
64デフォルトの名無しさん:2011/10/12(水) 00:34:38.14
解決しました
65デフォルトの名無しさん:2011/10/12(水) 01:55:23.55
Rubyのどこが直感的なのか?
66uy:2011/10/12(水) 01:56:41.56
>>63
俺から言わせればゴミ

=> 二文字で1記号の役割もたせてるとかバカかと思う
OSとキーボードとIMEさっさと改造しろ
67デフォルトの名無しさん:2011/10/12(水) 05:37:23.01
>>65
知らんよ
そう表現した人に直接聞け

素の文法レベルならともかく、第三者ライブラリ挟んだ時点で直感的もなんもないと思うけどな
68uy:2011/10/12(水) 06:26:41.63
"Rubyバカにしてる子ってさ
変数に$ついてる言語触ってるって事だよね

いちいちSHIFT+4キーおして $ 打ちまくってる感触はどう?",



"これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど

もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ",
69デフォルトの名無しさん:2011/10/12(水) 09:33:21.34
スクリプト実行時、以下のエラーメッセージが出ました。
undefined method `Pathname' for main:Object (NoMethodError)
解決方法を教えてください。
OSはWinXPsp3
rubyバージョンはruby 1.8.4 (2005-12-24) [i386-mingw32]
70デフォルトの名無しさん:2011/10/12(水) 09:36:04.20
レス番50あたりから音読
71デフォルトの名無しさん:2011/10/12(水) 10:07:12.94
>>69
require 'pathname'
72デフォルトの名無しさん:2011/10/12(水) 10:14:41.59
>>69
これって釣り?なんかバージョンがすげーピンポイントなんだけど
釣りじゃないならPathnameをPathname.newに書き換えるか
rubyのバージョンを上げる
73デフォルトの名無しさん:2011/10/12(水) 14:25:20.58
res['content-type'] =~ %r!text/html!

の%r!と末尾の!の意味がわかりません
教えてください
74デフォルトの名無しさん:2011/10/12(水) 14:59:31.71
windows使ってたらchmが便利だから、↓からrubymanjp_20070802.zipっての落として使うといいよ
http://rubyforge.org/frs/?group_id=3959
75デフォルトの名無しさん:2011/10/12(水) 15:11:43.18
>>73
これ検索しにくいんだよな
正規表現リテラルのパーセント記法と呼ぶ
ttp://doc.ruby-lang.org/ja/1.9.2/doc/spec=2fliteral.html#percent
76デフォルトの名無しさん:2011/10/12(水) 15:42:39.24
>>73
記号関係はここから探すと見つかることがあるよ

Rubyで使われる記号の意味 - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/old-man/html/Ruby_A4C7BBC8A4EFA4ECA4EBB5ADB9E6A4CEB0D5CCA3.html
77デフォルトの名無しさん:2011/10/12(水) 16:25:40.18
>>75-76
ありがとうございました

>>74
どこに入れればいいんでしょう?
表示されませんでしたorz
78デフォルトの名無しさん:2011/10/12(水) 16:57:50.45
最低得点者を求める方法なんですが
最低が同点のときはすべて求める場合、以下のプログラムでOKでしょうか
もう少しスマートな方法がありますか?

※playersの各要素は、得点を扱うインスタンス変数@scoreを持つオブジェクト
score_min = 1000
result = []
players.each{ |player|
score = player.score
next if score > score_min
if score < score_min
score_min = score
result.clear
end
result.push(player)
}
return result
79デフォルトの名無しさん:2011/10/12(水) 17:16:38.07
>>78
そんな面倒なことはrubyでは普通しない
確認はしてないから動くか分からんけど

score_min = players.map{|i| i.score}.min
return players.select{|i| i.score == score_min}
80デフォルトの名無しさん:2011/10/12(水) 18:15:06.73
>>77
ファイル右クリック=>プロパティ=>ブロックの解除
かな
81デフォルトの名無しさん:2011/10/12(水) 18:33:59.66
select 厨がまた出たか
Ruby ではおおむね find_all のほうを使う
select と reject と detect と collect と inject がすべて同じ言語のコレクションオブジェクトにあって
使い分けしなければならないというのは初心者には酷だ
82デフォルトの名無しさん:2011/10/12(水) 18:36:45.56
どうでもいいよ
83デフォルトの名無しさん:2011/10/12(水) 18:48:27.72
いちいちmapで配列作らないと最小値が探せないというのはスマートとは言えないな
84デフォルトの名無しさん:2011/10/12(水) 19:02:04.81
>>83
ん、別にいらないよ
p ['ccc','bb','a'].min_by{|x| x.size} #=> "a"
85デフォルトの名無しさん:2011/10/12(水) 19:07:49.61
ブロック渡してもEnumeratorを返すようなmapがないのか。
mixとmax自体はEnumerable汎用なのに。
86デフォルトの名無しさん:2011/10/12(水) 19:11:21.17
>>78
たぶん↓みたいにも出来る
players.group_by{|i| i.score}.min.last
87デフォルトの名無しさん:2011/10/12(水) 19:16:47.23
>>86
group_by{|i| i.score} の返す値は i.score がキーの Hash だと思うんだけど、
そのばあいの min ってどういう挙動になるの?
8887:2011/10/12(水) 19:23:48.66
あ、 [i.score, score] が最小のものが選ばれるので、
実質的には i.score 最小のものが選ばれる、ということかな。
89デフォルトの名無しさん:2011/10/12(水) 19:28:27.41
>>87
気づいたみたいだけど、単にキーと値の配列で比較されるはず

90デフォルトの名無しさん:2011/10/12(水) 19:30:05.10
自分で言ってるけど、Enumerable を include したオブジェクトの each メソッドに対する単一のブロック引数がなにになるかによる
{'k1' => 'v1'}.each{|e| p e} は ['k1', 'v1'] を表示するので、Hash の min はこの要素2の配列に対して <=> を試した結果だね
9187:2011/10/12(水) 19:38:33.10
ああなるほど、そのコレクションの each の実装によるのね。納得。
92デフォルトの名無しさん:2011/10/12(水) 20:47:23.52
>>80
ありがとうございます、見れました
9378:2011/10/12(水) 23:19:00.56
ありがとうです
group_byはおもしろいと思いました
最近のバージョンで搭載されたヤツですね
直感的にはselectかfind_allを使うほうがわかりやすいのかな
94uy:2011/10/13(木) 08:40:59.38
for i in 0..3
の in ってさ、必要だったの?

for 0..3 じゃだめだったの?

これrubyらしくかくならこうじゃn
for 0..3 do | i |

それとも今後
for i or 0..3
とか
for i and 0..3
とかでてくるわけなの?
95デフォルトの名無しさん:2011/10/13(木) 13:30:08.68
> for 0..3 do | i |

これがRubyらしいとか笑えるw
96デフォルトの名無しさん:2011/10/13(木) 14:00:48.60
rubyのforはpythonからパクったの?
97デフォルトの名無しさん:2011/10/13(木) 14:10:38.87
シェルスクリプトかも
98デフォルトの名無しさん:2011/10/13(木) 19:15:12.58
>>94
(0 ... 3).each do |i|
でいいだろ
99デフォルトの名無しさん:2011/10/13(木) 23:20:09.50
見えない人と会話しないでくらさい><;
10048:2011/10/13(木) 23:44:41.25
>>99も又、さっきまで見えてなかった。
という訳で、99は再帰からの脱出条件を書くように。
101デフォルトの名無しさん:2011/10/14(金) 00:00:27.73
制御構造のほうが好きや
102デフォルトの名無しさん:2011/10/14(金) 03:51:34.12
README.mdというファイルを閲覧するアプリは何ですか?
103デフォルトの名無しさん:2011/10/14(金) 03:58:52.13
めんどくさい質問だなあ
たぶんgemのライブラリに入ってるやつだと思うんだけど

基本的には、テキストファイルとしてそのまま人力で読む
MarkDown形式と呼ばれる記述法で、記号類は適度に読んだり読まなかったり

gemのインストールでドキュメントのインストールを有効にしている場合はdoc/というサブディレクトリが作られているはずなので、
その中にreadme.mdをrdocとかyardとかで変換した結果のreadme.htmlがあるはずだからそれをWebブラウザで表示させてもいい
104デフォルトの名無しさん:2011/10/14(金) 13:45:29.42
クラスやメソッドの直前に書く
RDoc?の適切な書き方の例はないものでしょうか?

検索してみたんですが、各人好き勝手というか、これといった規則がないようで参考にならず
せめて引数と戻り値ぐらいはJavadocのようにカッチリ書いておきたいのですが

…Netbeans上でRubyスクリプトを書いてますが
補完時にRDocも表示してくれるものの、レイアウトが整っておらず読みづらくて便利さも半減で
おそらく規則に従って書けば、と思うものの、その規則・書き方の例が見つからず…

それとも今は yard とやらで書くほうがトレンドなんですかね?
105デフォルトの名無しさん:2011/10/14(金) 14:14:51.33
訃報: C 言語の開発者、デニス・リッチー氏が死去
ttp://developers.slashdot.jp/story/11/10/13/0224245/

Google+ で Rob Pike 氏が語ったところによると、C 言語の開発者、K&R の R であるところの Dennis Ritchie 博士が亡くなられた。
70 歳 (Rob Pike 氏による Google+ への投稿) 。

長らく闘病中だったとのことで、先週末に自宅で息を引き取ったそうだ。
106デフォルトの名無しさん:2011/10/14(金) 14:19:56.82
スレ選べよ
何のために分かれてるんだ
107デフォルトの名無しさん:2011/10/15(土) 00:25:57.78
rubyは学習し始めたばかりなんですが公式マニュアルみてもどうやってライブラリを使っていいのかわかりません
PHPのマニュアルみたいにサンプル付きで書かれていればわかりやすいのですが
Rubyで逆引きサンプル本みたいなのございませんか?
108デフォルトの名無しさん:2011/10/15(土) 00:28:02.68
ございますよ?
109デフォルトの名無しさん:2011/10/15(土) 00:46:04.82
メソッドのサンプルそのものはついてるんだけどね
初心者向け記述をなくすことで効率上げてるんだけど、初心者向け記述がないので初心者は読めない
プログラミング言語マニュアルとして正しい方向性のひとつではあるが
110デフォルトの名無しさん:2011/10/15(土) 11:04:19.80
空きポートのリストを知りたいと思っています。
netstatコマンドのような情報を取ってくる事ができるとベストなのですが
いい方法はありますでしょうか?
111デフォルトの名無しさん:2011/10/15(土) 11:24:44.56
puts `netstat` じゃダメ?
112110:2011/10/15(土) 12:12:30.48
レスありがとう。
クロスプラットフォームなライブラリがあったらなぁと思ったのですが
やっぱ無いのかな
113デフォルトの名無しさん:2011/10/15(土) 12:58:02.17
一瞬「おっ」と思ったけど、/proc fs前提だから移植性に乏しいな。
https://github.com/agoddard/ruby-netstat
114110:2011/10/15(土) 19:15:29.73
ありがとう。
自分で適当にごまかすことにしました。
115デフォルトの名無しさん:2011/10/15(土) 23:27:35.98
foreachに相当する書き方と
for(var i =10; i>0; i--)に相当する書き方を伝授してください
116デフォルトの名無しさん:2011/10/15(土) 23:43:05.65
[1,2,3].each{|n| puts n }
10.downto(1){|n| puts n }

(10...0).eachのように書けたらしっくりきそうだけど
117デフォルトの名無しさん:2011/10/16(日) 00:25:30.00
独特すぎて難しいですね
何でforeachとforを実装してくれなかったんでしょうか
118デフォルトの名無しさん:2011/10/16(日) 00:31:05.38
for i in [1, 2, 3]
 print i*2, "\n"
end
119デフォルトの名無しさん:2011/10/16(日) 00:37:17.38
Rubyのforはあまりにも使わないので「こうだったかな」と
資料を確認したりirbで動かしたりしてみないと書けない。
120デフォルトの名無しさん:2011/10/16(日) 00:39:45.02
retry使うためにfor使ったりする
121デフォルトの名無しさん:2011/10/16(日) 04:27:13.19
>>117
いや、いわゆる従来のforやforeachも充分に独特すぎて難しいと思うぞ(特にfor)

Rubyの場合、枚挙はオブジェクト単位で考える
配列やHashなどの複数データのカタマリがあったのなら、それを全部順に取り出す場合、
arr.each do |e|
puts e
end
のように書く
そりゃまあ確かに、0から配列サイズsizeまでの整数を考えて、
arr[0]見てインクリメントさせてarr[1]見てインクリメントさせてarr[2]見てインクリメントさせてarr[size]までやるという考え方もあるが、
 ((xを0からsizeまで1ずつ増やしてarr[x]でアクセスできるようにするなんらかの機構)){
  puts arr[x]
 }
配列やHashなどが持つeachメソッドに枚挙機能が必ずついているRubyではそんな二重に手の込んだ面倒なことはしない
eachに聞けばそれで済むからだ

枚挙するデータのカタマリが存在せず、単になにかを10回繰り返したいような場合は
10.times do |x|
puts x
end
とか
0.upto(10) do |x|
puts x
end
とか書く
122デフォルトの名無しさん:2011/10/16(日) 04:29:16.85
Iterationを枚挙って表現する奴はじめて見たww
123デフォルトの名無しさん:2011/10/16(日) 04:34:37.10
eachをイテレーションって表現する奴まだいたんだwwww
124デフォルトの名無しさん:2011/10/16(日) 04:35:25.10
>>122
横レスだが、iterateを枚挙でenumurateを列挙と訳すのは普通じゃないのかと....
じゃあ>>122はiterateを「自分の言葉」でどう訳す?

# 予想されるレス:iterateはイテレート、馬鹿じゃねーのww
125デフォルトの名無しさん:2011/10/16(日) 06:06:51.78
ものすごく説明が下手だね
126デフォルトの名無しさん:2011/10/16(日) 06:20:02.44
×みたいな特殊文字全部をデコードしたいんだけど1文字ずつ自分でやるしかない?
& > < "だけならunescapseHTMLでできたが
127デフォルトの名無しさん:2011/10/16(日) 06:26:43.69
ここもエンコードされるのか
&times;ね
128デフォルトの名無しさん:2011/10/16(日) 07:28:25.56
文字実体参照を本来の文字にしたいのだと推測
puts Nokogiri::HTML.parse('&times;').inner_text
×
129デフォルトの名無しさん:2011/10/16(日) 07:40:04.80
>>128
nokogiriでできたのか
open-uriしか使ったこと無かったサンクス
130デフォルトの名無しさん:2011/10/16(日) 09:31:56.95
結局、RDocの書き方については何のレスも貰えず
誰も使ってない・書いてないの?
いくらなんでも「○○のソースが参考になる」ぐらいのアドバイスは貰えるかしらと期待したのに

Rubyはドキュメント不足が問題視されてたようですが、遠因がここにもありそうですね
ドキュメントを書かない人ばかりでコミュニティが形成されてるから、関連ツールを使ったことがなく、話題を振っても分からないので無視されるんでしょうか?

この手のフォーマットなんて、「これに従って書いといてね」ぐらいで済む話なのに、それすら無いとは…
こういうところの整備・ルール作りは、地味だけどボディブローのようにじわじわ効いてくるのに
所詮Rubyは、
・使い捨てスクリプトを書くのが関の山
・大規模開発では実用にならない
・玩具レベル、趣味で使う言語
なのですかね…
まあ、そういうのも嫌いじゃないけど…
13148:2011/10/16(日) 09:49:25.39
2chで世界を知った気に成るってのも凄いな。
132デフォルトの名無しさん:2011/10/16(日) 09:52:05.77
>>130
>結局、RDocの書き方については何のレスも貰えず
そんなものがあったら代替議論なんて出ずにRDocが今も使われていただろうね
なかったからこそ、プログラマブルなドキュメントとしてのRDocは終焉を迎えている
あと、レスが無かったのは自分で答書いてるからに過ぎない
133デフォルトの名無しさん:2011/10/16(日) 09:53:04.93
> 大規模開発では実用にならない
開発するだけなら使えるよ。その後はいろいろ地獄だけど。
134デフォルトの名無しさん:2011/10/16(日) 09:56:22.42
>レスが無かったのは自分で答書いてるからに過ぎない
うむ
>>104書いておきながらまさかそれで止めるとは思わなんだ
135デフォルトの名無しさん:2011/10/16(日) 09:56:30.88
ディスってるだけじゃ申し訳ないので…
NetBeans上でそれっぽく表示されるRDocの書き方を色々試した結果を一応書いときます。下のような感じ

# メソッドの説明文
#
# == Args:
# x,y:: 座標値
# == Returns:
# trueならヒット,falseならヒットしてない
def check_atari(x, y)

とにかく色々な書き方を試したけど、「#」と「==」の間には1つ空白を入れないと反映されない
あと、「::」の前は1つも空白をいれちゃダメで、「::」の後ろには1つ空白を入れないとダメ。インデントがおかしくなる

もちろんこの書き方が正しいかどうかは分からない。補完時にそれっぽく表示されたのはこういう書き方だった、というだけの話。Netbeans特有の書き方なのかもしれない
やはり正解というか、本来の書き方・規定・フォーマットが知りたい。でも、存在してないようですね…Rubyはフリーダム過ぎる
136デフォルトの名無しさん:2011/10/16(日) 10:03:00.42
>>132
yardがトレンドなら「そうだよ。yard使えや」と一言レスつけてくれれば済む話じゃないですか…
誰も書かない=誰も知らないし分からないのだな、としか捉えようがないですよ…

でもまあ何にせよ、RDocだけじゃ厳しいという共通認識だったのですね
納得できました
あとは…Netbeans上でyardと連携できるかどうかを今後調べてみます
助言ありがとうございます
137デフォルトの名無しさん:2011/10/16(日) 10:05:19.34
トレンドでもなんでもない
実質上の唯一解であるというだけで、特段勧めるものでもない
おなたが求めるものはおそらくJavaで、それはおそらくJavaにしかない
138デフォルトの名無しさん:2011/10/16(日) 10:08:25.72
そもそもIDE上でRubyスクリプト書いてる人がまずいないしな
連携が当たり前のようにどうこう言われてもわりと困る
139デフォルトの名無しさん:2011/10/16(日) 10:14:09.01
>>130(>>104)
マジレスすると、Rubyドキュメンテーションに標準の規則/規約は無い。
おそらく>>130はJava経験者で(JavaDocのような)明解な指針を期待していると思うけど、
残念ながらRubyコミュニティにそんな空気は無い。(少なくとも自分の知る限りでは....)
とりあえず注釈(annotation)を書けば、それをHTML化して読めるから嬉しいよね、というのがRDoc。
それでも、RDocは必要最低限の文書化に必要な要素は(それなりに)用意されている。
あとはプログラマ自身の文書化に対する意志にゆだねられている、というのがRuby文化。

もしも(JavaDocのような)RDoc注釈規約が必要としているなら、たとえば以下が参考になるかもしれない。
・Ruby × TPJ|高額合算システム(松江市様)
  http://www.tpj.co.jp/ruby/case001_01.html
ここからダウンロードできる開発規約の中には、RDoc注釈に関するガイドラインが含まれている。
ただしあくまでこれは参考だ。(個人的には部分的に異論があったりする...)

あとは>>130が責任を持つプロジェクトで、どこまで「文書化を重視」するかにかかっている、と思う
140デフォルトの名無しさん:2011/10/16(日) 10:22:45.91
>>137-139
ありがとうございます
自分も今ちょうどググってて、yardもフルボッコであることを今頃知りました…

Rubyについて Part 36
http://logsoku.com/thread/pc12.2ch.net/tech/1246174168/181-

Rubyという言語の特性を鑑みれば、たしかにこれは整備しづらいですねえ…
納得できたと同時に、皆様のおかげでRubyについてもさらに理解を深めることができたように思えます
面白いというか、興味深い言語だなあ…>Ruby
141デフォルトの名無しさん:2011/10/16(日) 10:57:15.03
windowsでコンソールプログラムを最小化すると タスクバーにプログラムのウィンドウタイトル(じっさいには プログラムのパス)が表示されますが
このウィンドウタイトルを設定する方法はございませんか?
ttp://www.texcell.co.jp/ruby/winconsole/winconsole.htmlで配布されているライブラリのsetConsoleTitleでできそうな気もしますが
ライブラリを使わないで設定する方法はございませんか?
142デフォルトの名無しさん:2011/10/16(日) 11:32:05.74
>>140
そのスレのは2年くらい前の認識で、
それから2年経って今は自力でコメント部分にタグ書いてHTMLマニュアルとしてきれいに出力することまではできてる
あと2年くらい経てばメソッド定義の引数とかから遡ってある程度テンプレートコメントが自動で作成されるようになるかもしれないし、
さらに2年くらい経てば他のプログラムとの連携もどうにかなるかもしれない
どっすか開発参加
143デフォルトの名無しさん:2011/10/16(日) 14:29:56.77
>>141
たぶんそのライブラリも同じことしてるんだろうと思うけど
require 'Win32API'
Win32API.new('kernel32','SetConsoleTitle','P','I').call('hogehoge')
で、変えられるみたいですな

でもRubyが終了してもタイトルがそのままになりますね
別のアプリを起動したりして次にタイトルが書き換わるまでは

自分で元に戻す必要があるのかも
require 'Win32API'
Win32API.new('kernel32','SetConsoleTitle','P','I').call('hogehoge')
144デフォルトの名無しさん:2011/10/16(日) 14:39:09.89
require 'Win32API'

module WindowsConsole
module_function
def setConsoleTitle(title)
_SetConsoleTitle = Win32API.new('kernel32','SetConsoleTitle','P','I')
_SetConsoleTitle.call(title)
end
def getConsoleTitle()
_GetConsoleTitle = Win32API.new('kernel32','GetConsoleTitle','PI','I')
buff = "\0"*(32*1024)
_GetConsoleTitle.call(buff,buff.size)
buff.chomp("\0")
end
ORIGINAL_CONSOLE_TITLE = getConsoleTitle
end

END{WindowsConsole.setConsoleTitle(WindowsConsole::ORIGINAL_CONSOLE_TITLE)}

WindowsConsole.setConsoleTitle('こんな感じかな')
sleep 5
145デフォルトの名無しさん:2011/10/16(日) 15:29:45.71
ちょっと間違ってました
chompは改行コードしか削れないんですね

chomp("\0")じゃ何も起こりませんので
sub(/\0*\z/,'')に変えてください
146デフォルトの名無しさん:2011/10/16(日) 15:47:45.46
>>145
>>chompは改行コードしか削れないんですね
嘘を書くな嘘を
147デフォルトの名無しさん:2011/10/16(日) 16:17:32.24
二重に間違ってました、すいません
chompは普通は一文字分しか削れないんですね
末尾の32キロバイトほどの\x0に大してchomp("\x0")してたので
ぱっと見でなにも削れてないのかと思ってしまいました

どっちにしろ末尾の \x0 の連続を削りたいのでchompでは駄目なわけですが
rstripだと\x00だけじゃなく空白文字も削れてしまうし
(というかそもそも空白を削るメソッドなので)
やはり置換するしかないのでしょう

るりまの説明で勘違いしてしまった
>self の末尾から rs で指定する改行コードを取り除いた文字列を生成し返します。ただし、rs が "\n" ($/ のデフォルト値) のときは、実行環境によらず "\r", "\r\n", "\n" のすべてを改行コードとみなして取り除きます。
「rs で指定する改行コード」ってので

chompは無引数でしか使ったことがなかったので詳しい動作を解ってなかったよ
せめて「rsで指定する文字列を」って説明ならなぁ
148デフォルトの名無しさん:2011/10/16(日) 16:38:59.86
>chompは普通は一文字分しか削れないんですね
引数で指定さえすれば何文字でも削れる
ただし、「1回」しか削らない
末尾に連続してる不定個の文字を削りたいなら、やっぱsubするしかない
149デフォルトの名無しさん:2011/10/16(日) 16:39:31.23
>>144
横からすまん
コード試したけど動かなかった
1.9.2

>>143
横からすまん
俺の環境では処理が終了したらタイトルも自動的に戻った
150デフォルトの名無しさん:2011/10/16(日) 16:44:28.86
`title hello`
でいいんでね
151デフォルトの名無しさん:2011/10/16(日) 17:09:59.35
>>150
それだ!
WindowsAPIなんて使わなくてもよかったんだな
とほほ

>>149
1.9.2だと文字コードエラーか
先頭にマジックコメント
#coding:cp932
とかを追加すると動くはず
152デフォルトの名無しさん:2011/10/16(日) 17:16:07.24
# coding: Windows-31J
とcp932って違いますか?
153uy:2011/10/16(日) 17:28:45.85
>>95
ハァ????????????wwwwww
お前Rubyのyieldすら理解していないの????????????????????????????????????????????

> for 0..3 do | i |
これを丁寧に書くと
for(0..3) do | i |

end
こうなるわけなんだけど 読める?  ねえ これ読める????ヨメルノー??????wwwwwwはああああ????


何でこの程度で話しかけてくるんだろ


>>98
>(0 ... 3).each do |i|
それはない
Rubyつかってて誰もが経験したストレスがここにあるよ


0...3.each do |i|
これで動かないという・・・


いっそ
0..3 each do |i|
こうだと思う
154デフォルトの名無しさん:2011/10/16(日) 17:29:18.72
enc/shift_jis.c
> ENC_ALIAS("CP932", "Windows-31J")

同じ。
155デフォルトの名無しさん:2011/10/16(日) 17:35:21.45
t = DateTime.new(2011, 10, 16, 18, 0, 0)
now = DateTime.now # tより古い日時
p t - now

tとnowを指定したフォーマットで表示する方法と
tとnowの引き算の結果をタイムスタンプとして表示する方法を教えてください
156デフォルトの名無しさん:2011/10/16(日) 18:01:49.52
同じなのもどうかと思うけど、同じという処理に確実になってるならそれはそれで

>>155
DateTime#strftime
157デフォルトの名無しさん:2011/10/16(日) 18:21:17.55
後者はタイムスタンプじゃなくて(タイム)スパンというのかな。
長さ不定の年や月をどう勘定するのかよくわからんが。
158デフォルトの名無しさん:2011/10/16(日) 18:30:57.56
時間範囲クラスというのは標準では無い
うまくやってるライブラリもあまり知らない
ActiveSupportにはあったはずなんだが
159デフォルトの名無しさん:2011/10/16(日) 18:32:47.83
#coding:CP932
while 1
sleep 1
end

ループ中にsleep 1を入れており、ctrl+zで終了すると
C:/rubytest/test243.rb:3:in `sleep': Interrupt
from C:/rubytest/test243.rb:20:3:in `<main>'
ってエラーになりました
ctrl+zを押して終了させたときにエラーが出ないようにする方法はございますか?
160149:2011/10/16(日) 18:36:43.45
>>150
'title hello'これすげえ
でも実行したら管理者: helloって表示された
Win32APIからだと管理者が表示されなかったから使い分けるのがいいのかな?

>>151
追加したら動いた
素晴らしい
161デフォルトの名無しさん:2011/10/16(日) 18:48:25.98
>>159
それエラーじゃないよ
162デフォルトの名無しさん:2011/10/16(日) 18:51:03.25
>> require 'active_support/all'
>> (1.year / 1.day).days
=> 365.25 days

その端数をキープするなら 365.2422 くらいまで追求しろ、と思ってしまう。
163デフォルトの名無しさん:2011/10/16(日) 18:52:00.84
>>161
これがでないようにするにはどうしたらよいですか?
164デフォルトの名無しさん:2011/10/16(日) 19:08:52.18
rubyとみるとついrugbyに見えてしまう。
165デフォルトの名無しさん:2011/10/16(日) 19:11:21.79
みえません。ぜんぜんみえません

>>159
begin
  while 1; sleep 1; end
rescue Interrupt => e
  $stderr.puts "caught Exception: "
  # p e
end
166デフォルトの名無しさん:2011/10/16(日) 20:21:27.64
>>165
すごいありがとうがいます!
167デフォルトの名無しさん:2011/10/16(日) 20:32:11.85
なんで |a| みたいな書き方するんでしょうか?
どんな利点があるんですか?
168デフォルトの名無しさん:2011/10/16(日) 20:44:59.11
その記法はSmalltalk由来。それを受け継ぐRubyは由緒ただしいオブジェクト指向、とか悦に入ることができる。
明確な利点はないので、とりあえず気持ちいいとかわかりやすいか直感的とか言っとけばよい。
169デフォルトの名無しさん:2011/10/16(日) 21:01:28.58
100/7みたいな計算式で小数点が発生するようなケースのときに自動的に小数点が削られるのは仕様ですか?
やりたいこととしてはJavaScriptのMath.floorで小数点を削った値が欲しいので勝手に削ってくれるのは嬉しいのですが
Rubyのバージョンによってこの挙動が違ったりしますか?
170デフォルトの名無しさん:2011/10/16(日) 21:08:57.52
整数同士の計算は常に整数を返します
整数オブジェクトのメソッドは整数を返すという以上の深い意味はないです
171デフォルトの名無しさん:2011/10/16(日) 21:09:52.33
了解しました
172デフォルトの名無しさん:2011/10/16(日) 21:13:20.24
>>168
直感的ってそれだけの理由だったのか・・・orz
他言語触ってた俺からしたら気持ち悪さ満点やわ
173デフォルトの名無しさん:2011/10/16(日) 21:20:26.40
たびたびすみません
while 1

sleep 0.1
system "cls"
end

これで定期的に画面をクリアしているのですが画面がちらつくことがあります
ちらつかないようにする事は難しいですか?
174デフォルトの名無しさん:2011/10/16(日) 21:22:10.65
それは外部コマンドclsに文句言え

一般的にめんどくさくなるけどcursesを使って画面制御するという方法もある
175デフォルトの名無しさん:2011/10/16(日) 21:37:30.47
176デフォルトの名無しさん:2011/10/16(日) 21:39:16.43
clsはWindowsのcmd.exeのコマンドじゃまいか
一行だけクリアすればいいのなら

loop { print Time.now; sleep 1; print "\r" }

とかできるけど、数行とかそれ以上のことがしたいなら
Ruby向けのライブラリを探すかWindowsのコンソール用のAPIを
使うはめになるんじゃないだろうか
177デフォルトの名無しさん:2011/10/16(日) 21:50:45.20
\r便利ですねこんな裏技があるなんて知りませんでした
\rって改行なのにこれで消えるなんて不思議ですね
>>174さんと175さんのも知識として調べてみます
178デフォルトの名無しさん:2011/10/16(日) 22:07:00.87
>>168
Smalltalkで |a| は(Rubyにはない)テンポラリ変数宣言だから関係ないでしょ。
ブロック引数も [:a | a+3](Rubyの { |a| a+3 } に相当) みたいに縦棒は使うけどかなり違うし。
それとも、MatzがSmalltalkをよく知らずに勘違いして猿まねしたとか?
179デフォルトの名無しさん:2011/10/16(日) 22:17:13.03
なになに?まさかのRuby起源主張?
180デフォルトの名無しさん:2011/10/16(日) 22:18:18.85
Rubyはわしが育てた
181デフォルトの名無しさん:2011/10/16(日) 23:00:22.40
CRは、復帰(タイプライターの打鍵装置を左端に戻す)
LFは、改行(タイプライターの紙ロールを1行分送る)
なので、行を改めて左端にタイプ位置を持っていくという意味にするには
LFのみやCRのみよりDOS式のCR+LFが一番自然なんだよな…
182デフォルトの名無しさん:2011/10/16(日) 23:24:12.88
自分はCRはMacの改行で
LFはLinuxの改行で
CR+LFはWinの改行を表すって覚えてました
CRがそういう機能を持っていたのはためになりました
system("cls")とsystem("clear")を使い分けずともCRで消せばクロスプラットフォームにコードが書け便利だと思えました
183デフォルトの名無しさん:2011/10/16(日) 23:48:10.27
覚えていた内容は合ってるよ
だから、CRで行頭に戻るのはDOS(windows)だけだ
残念ながらクロスプラットフォームにはならない

CRがそういう”機能”を持っているんではなく
本来はそういう意味というだけ
184デフォルトの名無しさん:2011/10/16(日) 23:53:17.24
>>165
そんなんでいいのか

Signal.trap(:INT){$stderr.puts "Interrupt!";exit(1)}
sleep 10
などと
シグナルトラップしないと駄目だと思ってた
185デフォルトの名無しさん:2011/10/16(日) 23:58:54.94
そもそも語源が
CR キャリッジリターン(carriage return) 行頭に復帰
LF ラインフィード(line feed) 行送り
だからなぁ

> CRで行頭に戻るのはDOS(windows)だけだ
そうだったのか
UNIX系だと
10.downto(0) do |i|
print "\r%02d"%i
sleep 1
end
puts
とかできないの?
186デフォルトの名無しさん:2011/10/17(月) 00:02:30.70
バックスペース使えばいいのかな?
10.downto(0) do |i|
print "\b\b%02d"%i
sleep 1
end
puts
187デフォルトの名無しさん:2011/10/17(月) 00:06:58.35
>>182
散々説明されてるけどCRは行頭に戻るの意味。消すって意味じゃないよ
>>176はTime.nowの返り値で上書きしてるだけ
消すなら空白を出力するなど工夫が必要になる

>>185
Linuxでもできるよ
188デフォルトの名無しさん:2011/10/17(月) 00:46:03.33
bashで画面をクリアするには、clearコマンドを使うか、[Ctrl]+[l]キーを押す
189デフォルトの名無しさん:2011/10/17(月) 00:48:48.38
RubyではなくCならライブラリがあります

画面のクリア|cursesの基本的な関数
http://www.fireproject.jp/feature/c-language/curses/basic.html
190デフォルトの名無しさん:2011/10/17(月) 00:55:14.22
bashとかcursesとかWindowsな初心者が目を回すのでそのへんでひとつ
191デフォルトの名無しさん:2011/10/17(月) 01:10:33.35
Ruby の curses ライブラリ(以下、Ruby curses)は、C のプログラムから端末
の画面を制御するための curses ライブラリ(以下、C curses)を利用して、端
末に依存しない形式でテキストユーザインタフェースを構築するためのライブ
ラリです。

http://doc.okkez.net/static/192/library/curses.html
192デフォルトの名無しさん:2011/10/17(月) 01:45:47.48
>>190
Windowsなんか使ってる馬鹿のことなんて考慮する必要はない
193デフォルトの名無しさん:2011/10/17(月) 07:39:56.64
馬鹿発見
194デフォルトの名無しさん:2011/10/17(月) 17:15:00.36
>>139
>マジレスすると、Rubyドキュメンテーションに標準の規則/規約は無い。
>おそらく>>130はJava経験者で(JavaDocのような)明解な指針を期待していると思うけど、
>残念ながらRubyコミュニティにそんな空気は無い。(少なくとも自分の知る限りでは....)

えー?本気で言ってる?
昔はいざ知らず、今はRubyでもドキュメントをきちんと書いてる
プロジェクトのほうが多いよ。有名プロジェクトは特にね。

RDocの書き方がわからない人は、とりいそぎ
Ruby on Railsのソースを見ればいいんじゃないかな。
丁寧にドキュメントが書かれてあるよ。

195デフォルトの名無しさん:2011/10/17(月) 18:01:03.96
>>194
君がJavaやってないのはよくわかった
196デフォルトの名無しさん:2011/10/17(月) 18:12:18.09
javaは実際のソースよりjavadoc用のコメントの方が多いとかあるよな
特にプロパティの部分がつらい
その代わり、ちゃんとしたドキュメントを提供してくれるわけだが
197デフォルトの名無しさん:2011/10/17(月) 18:20:11.95
JavaDocって書いてあるんだから知らなければ調べればいいのに…
どうせJavaのDocument書くコメントの略だろくらいにしか思ってないんだろうけど
198デフォルトの名無しさん:2011/10/17(月) 18:56:17.80
Railsのドキュメントに関しては相当きっちりしてる
読むやつなんて少数派だろうけど
199デフォルトの名無しさん:2011/10/17(月) 19:39:14.31
君がrdocを知らないのもわかったから、Java厨w
200デフォルトの名無しさん:2011/10/17(月) 20:08:28.32
>>198
だから、メソッドやクラスの使い方を文章で書いてあることを求めてるんじゃないんだよ
201デフォルトの名無しさん:2011/10/17(月) 20:19:40.75
必要なこと書かないで察してほしいとか思うのは、
ある種の病気だよ
202デフォルトの名無しさん:2011/10/17(月) 20:23:36.59
年寄り連中は話がくどいな
203デフォルトの名無しさん:2011/10/17(月) 22:49:08.84
[\x81\x40-\xFC\xFF]
この正規表現名は何を表しているのでしょうか?
204デフォルトの名無しさん:2011/10/17(月) 22:59:15.76
なんだっけそれ
sjis?
205デフォルトの名無しさん:2011/10/17(月) 23:07:31.47
全角にヒットするみたいなんですがこのパターンがどの範囲を示しているのかわかりません
正規表現はhttp://webcache.googleusercontent.com/search?q=cache:EhT76SyFDiIJ:maruo.dyndns.org:81/hidesoft/hidesoft_2/x25803.html+encodingshiftjis&cd=1&hl=ja&ct=clnk&gl=jp&inlang=jaでみつけました
206デフォルトの名無しさん:2011/10/17(月) 23:51:46.01
そもそもRubyの正規表現で [¥x81¥x40]って ¥x81 と ¥x40 の並びに
マッチするんだっけ?
207デフォルトの名無しさん:2011/10/18(火) 01:10:53.40
+ 多バイト文字コードが指定されているとき、
文字集合の中で八進数または十六進数表現の連続は、多バイト符合で表現された
一個の文字と解釈される
(例. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
208デフォルトの名無しさん:2011/10/19(水) 09:27:50.14
自作のgemなどのライブラリで、ユーザー入力を解釈したデータ置き場が必要です
ディレクトリ指定をどこにするのがいいんでしょうか? そもそもなにで設定させるべきですか?
209デフォルトの名無しさん:2011/10/19(水) 09:37:31.71
>ディレクトリ指定をどこにするのがいいんでしょうか?
現状、特にはないので、ユーザーの指定がなければ動作しないようにするべき(またはTEMPに作っておく)
ホームやカレントに .ライブラリ名/ とか勝手に掘ってそのままにするライブラリがたまにあるんだけど、超迷惑

>そもそもなにで設定させるべきですか?
メソッド引数でファイルパスを指定
メソッド引数で設定ファイルのファイルパスを指定
またはコマンド引数で上記と同じようなことを制御
のどれか
これまたたまーに、~/.ライブラリ名rc の存在を仮定したり勝手に作ったりするライブラリがあるんだけど、果てしなく迷惑
210デフォルトの名無しさん:2011/10/19(水) 13:08:28.28
>>208
ライブラリでどうしても必要なら
Hoge.dir = '/hoge/hoge'
とかクラスのメソッドで指定した場合だけそこに書くようにすればいいんじゃね
設定ファイルを置いたりはアプリケーション側のことだと思うし

211デフォルトの名無しさん:2011/10/19(水) 14:08:24.01
単なる「便利な」データファイル置き場もないんだよな
gemのディレクトリにdataディレクトリ作ったら怒られるよねやっぱ
212デフォルトの名無しさん:2011/10/19(水) 14:21:05.18
ほかのパッケージ管理システムにはそういうの用意されてるもんなの?
213uy:2011/10/19(水) 14:24:53.47
ためしに片っ端からgemインストールしてみると
トップディレクトリにすげー数のゴミフォルダが作られてるのな
a とか b とかだよ c d f temp tmp ttt xxxxdf ggrinjeaftwau3ft4uehugekzvdxgomihasinererwhgbvv

ゴミみたいな奴が作ったライブラリなんだと思う
214デフォルトの名無しさん:2011/10/19(水) 15:09:10.54
>>212
そこはパッケージ管理システムの責務ではなくて、個々のライブラリがなんとかする問題じゃないかな
215uy:2011/10/19(水) 18:31:36.63
質問です
2chに対策されてMechanizeからの書き込みが出来なくなりました
ちょっとあるスレで特定人物のとあるゴミッカス野朗を晒し続けたいのにですが
Mechanizeからの自動書き込みが出来ないとちょっとWin32OLEでIE起動してーとかいうかっこ悪いことになってしまうんですが
書き込めないのは僕だけでしょうか?
みなさんは無事書き込めますか?

考えうる原因は3つありますが面倒なので、まだ試していません
216デフォルトの名無しさん:2011/10/19(水) 18:37:36.08
>>215
そらそうよ
217デフォルトの名無しさん:2011/10/19(水) 18:44:21.52
584 :uy:2011/05/31(火) 02:08:25.67
はじめましてマ板、ム板、vipにて、uy( うゆ )というコテハンをやっている者です

13〜18歳のおにゃのこ(新品)にだったら手取り足取りRubyとかlambdaとか、世界の真理についても教えれるけど?
何作りたい? CGI? ゲーム? それともプログラミングだけおぼえたい?
2chでは漏れの事、バカにする奴多いけど、マジで技術高いよ?あと運動も得意です。昼でも、夜でも。
ちなみに両利き、好きなアニメは禁書目録、10万3000冊の技術書を読んでスペルインターセプトできるようになるのが夢
好きな語尾は「 ――だよ? 」 と 「 ――みさかはみさかは 」 です

[email protected]
22♂です
メールまってます

あと、部屋こんなんばっかりなので
こういうの大丈夫な子歓迎
http://www.geocities.jp/c_zelos/soto/heya0.jpg

自分でコスプレしようかなぁ・・・なんて本気で考えてた頃もあったんだけど、女装mixiコミュとかみたら、「やべぇwwwww」って思って
一線は越えない事にした、なのでイベントとかで何でもいいのでコスプレして一緒に周ってくれる人も、すごくすごく募集中です
ここ2年くらい実は、技術高めるべく超研究者モードだったのでイベント関係殆どいってないから今年はいっぱいいきたなぁ(**^^)キミと

スレ汚し、失礼しました
218uy:2011/10/19(水) 18:45:31.57
へーぼくだけなんですか
FOXはゴミッカス野朗ですね
正直イマドキ2chなんてなくても困らないんで別にいいんで
時期がきたら潰しますよ
まあしいていうならニュー速VIPがなくなるのは残念なんですけどね
ああいう場というのはなかなかネット上に出現しないカテゴリーです
けれど解除しないつもりならいたし方ありません
ぼくは2chの敵になるしかありません
219uy:2011/10/19(水) 18:47:50.68
>>217
何それ?? 気に入っちゃってんの??
その程度の書き込みに芸術性を見てしまう程なの?
こいつヴィオラすら弾けないんだろうな・・・・・
220デフォルトの名無しさん:2011/10/19(水) 19:06:37.03
キンモー☆
221デフォルトの名無しさん:2011/10/19(水) 19:11:47.87
ヴィオラw
222デフォルトの名無しさん:2011/10/19(水) 20:40:24.61
見えない人と会話しないでくらさい><;
223デフォルトの名無しさん:2011/10/19(水) 21:32:38.38
>>219
おまえみたいなクソのせいでVPS置いてるネットワークごと規制されたりするんだぞ
やめろ
224デフォルトの名無しさん:2011/10/20(木) 01:40:39.89
たのむからアレと会話しないで
お願いだから
心の底からお願いだから
225デフォルトの名無しさん:2011/10/20(木) 06:59:45.09
執着しすぎw
226デフォルトの名無しさん:2011/10/20(木) 07:04:28.06
uyとかいうゴミクズをどうにかする方法はないでしょうか?
227デフォルトの名無しさん:2011/10/20(木) 09:14:10.24
>>226
参照しないこと
参照する限りGCの対象にならない
228デフォルトの名無しさん:2011/10/20(木) 09:18:40.28
'u'-'y'='C'-'G'
229sage:2011/10/20(木) 10:57:07.36
以下のようなURLでサーバー側のerbスクリプトを呼び出す事は可能でしょうか。
http://localhost/test.erb?str=hello

Webrickサーバー側で以下メッセージが出て止まってしまい困っているのですが
offline mode: enter name=value pairs on standard input

■test.erbのコード
<%
require "cgi"
cgi = CGI.new
str = cgi["str"]
return str
%>

そもそもこういった事は出来ないのでしょうかアドバイスお願いします
230uy:2011/10/20(木) 11:55:20.92

<%
require "cgi"
ARGV.replace(["str=sine"])
cgi = CGI.new
str = cgi["str"]
%>

<%= str %>

<%= "gomi ha sine" %>
231デフォルトの名無しさん:2011/10/20(木) 14:55:26.62
>>229
ARGV << "" # 空文字列を追加
require 'cgi'
cgi = CGI.new
...
でどうでしょうか。
232uy:2011/10/20(木) 17:32:01.34
>>231
ハァ?????????
どう考えてもセキュリティホール
>["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
]
233229:2011/10/20(木) 17:36:57.95
>>231
ありがとうございます。
試してみましたが、offline modeで止まる事はなくなりました。
ただクエリパラメータとして取得できない状態です。
str = cgi.params["str"]
でも
str = cgi["str"]
でもダメです。
234uy:2011/10/20(木) 18:04:07.87
無理だなそれ
出来ない事はないはずだが、少しググったところ誰もやっていない
それがやりたいなら普通に.cgiでクエリパラメータは受け取って、erbは出力専用にする

erbは所詮evalらしいから、そのevalの中でCGI.newという動作を
そもそも想定してないんじゃないか?
ただ、自力で自分のURLからパラメータ解釈しようとすれば可能だろう
erbはhtmlメタ出力をするものだと考えたほうが良いと思う
235デフォルトの名無しさん:2011/10/20(木) 20:21:17.18
(1 2 3) (2 3 4) (3 4 5) ・・・
みたいなデータを正規表現でマッチさせて中身の数字だけを取り出そうとしているのですが
pattern_mesh = Regexp.new("(?:(?:\\()(\\d+\\s\\d+\\s\\d+)(?:\\))\s*){n}","x")
でうまくマッチさせることができません。nはカッコの数
しかし{n}を使わずに(?:(?:\\()(\\d+\\s\\d+\\s\\d+)(?:\\))\s*)を並べるとマッチしてくれるのですが
{n}を使って繰り返す方法を教えて下さい。
お願いします
236デフォルトの名無しさん:2011/10/20(木) 21:37:08.44
単純な
/(.){3}/ =~ '0123456789'
を試してみたけど、$1 は '2' になるんだな。
237デフォルトの名無しさん:2011/10/20(木) 22:14:24.47
>>229
CGI 関係はばっさりカットして
str = query['str']

>>235
()や空白を削除してからじゃあかんの?
238デフォルトの名無しさん:2011/10/20(木) 22:35:56.37
HTTPServer.new(:port => 3000)でbindできないって怒られてる間に
素敵な回答がついてたでござる

>>229
もはや蛇足だけど.erb側のコード
<%= query %>
<%= meta_vars %>
<%= query['str'] %>
239238:2011/10/20(木) 22:43:10.91
もちろんエスケープしてね
240デフォルトの名無しさん:2011/10/20(木) 23:23:21.73
>>235
ひょっとしてn じゃなくて#{n}だったとかいう話だろうか?
でもグルーピングを繰り返すと繰り返しマッチした最後の結果しか得られないぞ
ごちゃごちゃした文字列から ひとまず (1 2 3) (2 3 4) (3 4 5) ・・・を抜き出す
ってことならいいだろうけど

s = '(1 2 3) (2 3 4) (3 4 5)'
s.scan(/\((\d+)\s(\d+)\s(\d+)\)/) # => [["1", "2", "3"], ["2", "3", "4"], ["3", "4", "5"]]
241デフォルトの名無しさん:2011/10/21(金) 13:37:03.52
do endと{ }は同じだと思っていたんですけど、
Enumerable#reduceに渡すときに、do - endだと
`reduce': no block given (LocalJumpError)
といったエラーが出て、{}だと実行できることがあります。
これってどういった違いなんでしょう?
242デフォルトの名無しさん:2011/10/21(金) 14:20:16.09
おなじじゃないです
結合強度が違います
メソッド呼び出し括弧を省略したときに影響が出ます

http://doc.ruby-lang.org/ja/1.9.2/doc/spec=2fcall.html#block
243229:2011/10/21(金) 18:06:01.41
遅くなりましたが
str = query['str'] で出来ました!
ありがとうございます。エスケープもするようにします!
244デフォルトの名無しさん:2011/10/22(土) 01:03:11.90
>>242
puts (0...n).reduce do|sum, i|
とか書いてたから、ブロックがputsの引数になってしまってたのかも
245デフォルトの名無しさん:2011/10/22(土) 06:23:03.92
unkonow
246デフォルトの名無しさん:2011/10/22(土) 09:00:12.43
よく
現在の接続してる人(見てる人)は何人って表示されますよね。

あれってどうやってつくるんですか?できればサンプルを載せてほしいです


環境はcentos+apache+railsでのサーバーです
247デフォルトの名無しさん:2011/10/22(土) 09:27:32.35
Rubyは1ミリも関係ないな
Railsも関係あるかどうか怪しい

いろいろ方法はあるんだが、基本的には、数分に1度程度、全ページに組み込んだJavaScriptで通信をさせるのが簡易
・通信がクライアントから送られているうちはそのページを読んでいるとみなす
・通信がクライアントから送られてこなくなったらそのページから移動した(または、ブラウザウィンドウを閉じた)とみなす
こんな感じ
過去3分のうちにAというページから6回通信があったら、Aというページの現在の閲覧者数は6人ですと表示
過去5分のうちにサイトの全ページから送られてきた通信の総数をリモホでuniqした結果が13だったら、このサイトの現在の滞在者数は13人

あれはそもそもかなり適当で、厳密にカウントする方法というのはない
248デフォルトの名無しさん:2011/10/22(土) 11:53:08.43
249uy:2011/10/22(土) 14:04:58.81
>>247
>あれはそもそもかなり適当で、厳密にカウントする方法というのはない
ハァ???
お前がWeb技術の何を知ってんの?????
ページクローズ時に何かアクション起こさせればカウント出来るだろ
あとは数十分でタイムアウト
何でその程度でレスが出来るの?
250デフォルトの名無しさん:2011/10/22(土) 15:17:12.89
CGIはサーバ側でHTML生成してクライアントで受け取りますが
HTMLにRubyのコードを埋め込んでクライアント側で
Rubyを実行してHTMLを生成するような技術ってないんですか。
251デフォルトの名無しさん:2011/10/22(土) 15:23:56.42
>>250
そもそもクライアントでRubyを実行するには、クライアント側の環境にRubyがセットアップされていることが前提になってしまう
252デフォルトの名無しさん:2011/10/22(土) 15:33:28.07
JSでRuby実装すればいいんだろ
簡単じゃん
253デフォルトの名無しさん:2011/10/22(土) 15:35:33.54
Rubyの実装がまた1つ増えるのかw
254デフォルトの名無しさん:2011/10/22(土) 15:37:07.70
JSで動くRuby環境をセットアップする必要があるのだが
255デフォルトの名無しさん:2011/10/22(土) 15:39:16.18
>>254
きっと、1つのファイルにRuby実装と、それを使ったコードをまるごと書くんだよ

…重いだろうけどなw
256デフォルトの名無しさん:2011/10/22(土) 15:42:34.65
CoffeeScriptの場合、インタプリタ自体をJavaScriptで書いたものがあるので
http://jashkenas.github.com/coffee-script/#scripts
ということもできる。
RubyをJavaScriptで書ける奴がいればきっとなんとかなるね(棒)
257デフォルトの名無しさん:2011/10/22(土) 15:43:27.26
おっと、インタプリタじゃない、コンパイラ(トランスレータ)だった。
258uy:2011/10/22(土) 18:36:44.79
>>252>>253
ハァ??????????????
とっくにあるっていう
IronRubyと一緒にリリースされてるだろうカスが ゴミカスが 情弱が
259uy:2011/10/22(土) 18:41:26.24
>>255
はあああ???
Ruby実装だけ別ファイルにしてクライアントのキャッシュに入れとくに決まってんだろ
  マ ジ で ア レ な の か ?

重いことにはかわりないけれど
1つのファイルにかかなきゃいけないって発想がどこからきたんだ?
JabaSkriputのかわりぬRubyつかおうってながれだってあるのに それすらしないのか??
260uy:2011/10/22(土) 18:43:55.74
>>250
はっあああああ???
ググレカス
http://www.moongift.jp/2011/01/20110107/
261uy:2011/10/22(土) 18:48:16.60
>>254
なんでたかがDLさせる程度の作業に「セットアップ」なんていう
キリッ!!っとした単語使うの?
こういうなんでもないところで使われると、別のもっと使うべき箇所で混乱の元になるんだけど?
はあ??

>>257
お前もだよ
機械語を生成しない実装を、コンパイラとか呼ばれると情報探そうとしたときにすげー困るんだけど????
っはっぁ???
262デフォルトの名無しさん:2011/10/22(土) 19:22:15.42
uyちゃんは珍回答した翌日よく壊れるな
263デフォルトの名無しさん:2011/10/22(土) 21:49:40.28
uy=ruby - rb
つまり、拡張子なしの偽装Rubyプログラムだ。
そう言えば、Rubyで作る人工無能ってあったな。
264デフォルトの名無しさん:2011/10/23(日) 00:13:08.33
rubyでマクロを書いた場合どこに保存したらいいですか?
homeのユーザーディレクトリの中ではなく、どのユーザーも共通して利用する場合の保存先を教えてください
マクロは手動で動かすのと自動的に動くやつの2種類あります
linuxです
265264:2011/10/23(日) 00:14:47.92
ついでにすみません
64bit OS(win.unix問わず)にrubyは対応してますか?
266デフォルトの名無しさん:2011/10/23(日) 00:25:21.53
>>264

マクロって何を意味している?
定型処理を自動化したスクリプトってことならPATHのどこに置いてもいいけど。
/usr/local/bin とか。

>>265

うちのRubyはこんなのだよ。
ruby 2.0.0dev (2011-10-19 trunk 33483) [x86_64-darwin11.2.0]
267デフォルトの名無しさん:2011/10/23(日) 00:41:12.21
まさかのエッジw
268uy:2011/10/23(日) 21:41:22.44
>>262
俺は触ったことのないものでもある程度はレスが出来る
CGI.newは普通のオブジェクトnewとは少し違う可能性が高く
eval内で動作させるのは厳しいものと考えた
なので今回のはRuby側がerbの時にCGI.new以外で、クエリパラメータ情報を
どこかにちゃんと保持してるかが問題だった
ちゃんと作られているようで安心した
269デフォルトの名無しさん:2011/10/23(日) 21:59:16.96
Ruby1.8でTimeからExcel等で使われているシリアル値を
得たいのですが簡単な方法があったら教えてください
よろしくお願いします
270デフォルトの名無しさん:2011/10/23(日) 22:23:06.81
>>268
あえて一言だけね
上のはWebrickのErbHandlerの問題
271デフォルトの名無しさん:2011/10/23(日) 23:06:39.37
そのものはない
あれはExcelの計算用の値だから、欲しいなら自分で計算するしかない

通常はそれに類するものを必要とすることはないはず
使用法が間違ってる可能性が大なので、そもそも何をしたいかを言うとなんとかなるかも
272デフォルトの名無しさん:2011/10/23(日) 23:12:35.95
またタイムスパンの話になるに3000点
Excelでシリアル値意識するといったら時間間隔計算くらいしかねえ
273デフォルトの名無しさん:2011/10/24(月) 00:11:17.81
>>269
こういう感じ?

class Time
  def serial(float = false)
    require 'date'
    ret = DateTime.parse(to_s) - DateTime.new(1900, 1, 1) + 1
    if float then ret.to_f else ret.to_i end
  end
end

p Time.now.serial
274uy:2011/10/24(月) 01:11:35.82
>>270
実装上の問題を指摘してんの?
ちゃんと作る気があるならできるとは思うが
面倒な事になるのが分かるから、別に妥協していいんじゃねと思ってる
cgiは.cgiでやれって感じだし
275269:2011/10/24(月) 06:02:26.13
レスありがとうございます

>>273さんのを参考にして上手く行きました
Timeだと閏秒?で誤差が出るのかずれるんですね・・・
276デフォルトの名無しさん:2011/10/24(月) 08:53:15.50
よくわからんけどロータス1-2-3バグ対応の件じゃなく?
277デフォルトの名無しさん:2011/10/24(月) 14:33:23.22
UTC+7の時刻を表示する方法を伝授してください
278デフォルトの名無しさん:2011/10/24(月) 15:57:30.39
ruby 1.9.2でsift-jisのファイルを
buff = NKF::nkf("-Sw --number-input", File.open(FILENAME, "rb").read)
のように読んで,buffを使っているのですが
ArgumentError: invalid byte sequence in UTF-8
が出ることがあります.
ファイルの中身をUTF-8として扱いたいだけで,不正な文字があるならその部分は消えてもいいのですが,どうするのがいいですか?


279デフォルトの名無しさん:2011/10/24(月) 17:10:24.32
2つの配列を比較して追加・削除された要素を調べるコードを書いたんですが、
もっとスマートに書くことはできますか?

ary1 = [1,2,3,4,5,6,7]
ary2 = [1,2,4,5,8,9]
del = []
add = []

ary1.each do |x|
 flag = 0
 ary2.each do |y|
  flag = 1 if x == y
 end
 del << x if flag == 0
end

ary2.each do |x|
 flag = 0
 ary1.each do |y|
  flag = 1 if x == y
 end
 add << x if flag == 0
end

puts "deleted:#{del}" #=> deleted:[3, 6, 7]
puts "added:#{add}" #=> added:[8, 9]
280デフォルトの名無しさん:2011/10/24(月) 17:24:23.23
ary1 - ary2
ary2 - ary1
があるよ
281デフォルトの名無しさん:2011/10/24(月) 17:27:33.10
追記。[1,2,2,3] - [1,2,4] は [3] を返すので注意
282デフォルトの名無しさん:2011/10/24(月) 17:35:44.63
PowerShell最強〜〜〜〜〜〜〜〜〜〜〜!!!

> diff 1,2,3,4,5,6,7 1,2,4,5,8,9

InputObject SideIndicator
----------- -------------
8 =>
9 =>
3 <=
6 <=
7 <=

さっさとArray#diff(arr){|i,s| }実装しろやぁ〜〜〜〜〜〜
283デフォルトの名無しさん:2011/10/24(月) 18:47:40.75
いいなあ。俺ももうRubyやめてPowerShellにするわ。
284デフォルトの名無しさん:2011/10/24(月) 20:42:54.44
>>278

nkfの--number-inputオプションってなんだっけ。

"¥x82¥xA0¥xF8¥x9F¥x82¥xA2¥x82¥xA4¥x82¥xA6¥x82¥xA8".
encode('UTF-8', 'Shift_JIS', invalid: :replace, undef: :replace, replace: '')
=> "あいうえお"
285デフォルトの名無しさん:2011/10/24(月) 21:28:13.76
みんなテストってどうしてるの?
test unit?
minitest?
rspec?
286277:2011/10/24(月) 21:35:01.01
お願いします
287デフォルトの名無しさん:2011/10/24(月) 21:47:02.04
>>277

標準のTimeはUTCと実行環境の地方時しか扱えない。

#utc_offsetでUTCとの秒差が出るので、時差分の秒数を増減して換算する。
タイムゾーン属性は変更できないので、あくまで意味的には元の地方時のまま
になるけど。

288277:2011/10/25(火) 00:18:28.13
ありがとうございます
やってみます
289デフォルトの名無しさん:2011/10/25(火) 09:17:27.64
>>284
￿みたいなのを戻すらしいです
これをしてないとファイルにHTML実体参照が混じっているときに
あとでHTMLをデコードするとshift-jisの文字コードが混ざって
invalid byte sequence in UTF-8
が出ていたので入れてます
今回はこれじゃなくて普通に変なコードが入っているようなので
ちょっとダサいですが
s = NKF::nkf("-Sw --numchar-input", s)
s.encode("UTF-16BE", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8")
としてよくなりました
290デフォルトの名無しさん:2011/10/25(火) 09:18:56.04
>>289
&#x1234;みたいなの
291デフォルトの名無しさん:2011/10/25(火) 12:13:38.53
マニュアルにPHP並みのサンプルコードを書いて欲しいって言いたいんですがどこに要望だすといいのですか?
292デフォルトの名無しさん:2011/10/25(火) 12:34:10.75
本を売りたいのでマニュアルが充実することは今後もありません。
293デフォルトの名無しさん:2011/10/25(火) 12:42:16.44
本でもいいです逆引きサンプルが充実している本を出してください
294デフォルトの名無しさん:2011/10/25(火) 12:46:30.89
マニュアル、前の方がよかったなあ。
見やすさという点では、ずっとよかった。

今のマニュアルだと、もはやメソッドを探せないよ。
メソッド名は元から知ってて、細かい挙動を知りたい人向けだと思う。
295デフォルトの名無しさん:2011/10/25(火) 13:34:27.77
クラス階層が一覧で見れなくなったのが痛い。例外クラスとか特に。
アルファベット順に並べられても全く嬉しくない。
296デフォルトの名無しさん:2011/10/25(火) 18:40:04.79
外部プログラムから探すのに最適化された結果をHTMLにして出力してるだけだからねえ
クラス使用初心者向けの情報はゼロだ

ただ、幸か不幸かあれを使いやすいものだと思ってる人はいない
たとえ使いやすいものであっても内容がまったく更新されず

   「ふた昔前の今は動かないようなバージョンに機能追加 (new feature!!)」

とか平気で書いたままになってる手動記述マニュアルよりはマシだ
ということで、ああいうふうになってる

最小の手間でなるべく最新の内容に保ち続ける算段があるのなら言ってもらえれば嬉しがる人が増えるかと思う
297デフォルトの名無しさん:2011/10/25(火) 18:54:49.97
全く知らないんだが、
あのマニュアルってどっかのデータから生成してるの?
298デフォルトの名無しさん:2011/10/25(火) 20:13:33.30
いわゆるるりまは手作業(専用MLあり)
ruby-doc.org はソースのコメントから生成じゃねーの?
299デフォルトの名無しさん:2011/10/25(火) 22:10:32.45
お願いしますPHPのマニュアルぐらい分りやすいマニュアルを作ってください
アフィリエイトとか踏みますのでお願いします
300デフォルトの名無しさん:2011/10/25(火) 23:18:07.59

RailsのPlug-in開発中に出会った問題ですが聞いてください
Objext.extendで標準ライブラリを拡張するために、以下の様にコードを書きました 

module MyPlugin::RubyExtensions::OpenStruct
def to_hash
# 宣言した 値を取得
keys=(self.methods - OpenStruct.new.methods)
# 以下ロジック...
end
end
st = OpenStruct.new({ foo: 1, bar: 2 }).extend(MyPlugin::RubyExtensions::OpenStruct).to_hash

to_hashメソッドの中で呼んでいるOpenStructが、モジュール名と衝突して使えない状態になりました
それならC++みたいに次の様に記述すれば、モジュール名と衝突しないだろうと書いてみたのですが
::OpenStruct.new
これでもダメでした
現在はモジュール名を変えてしまって回避していますが「::モジュール名」で
globalなクラス名が呼べていないのはなんだか気持ち悪いのですが…
こういう挙動になっている理由&globalなモジュールの呼び出し方ご存知でしたら
何方か教えてください
環境は ruby1.9.2、CentOSでrvmでインストールです
301デフォルトの名無しさん:2011/10/26(水) 00:54:59.97
>>300
モジュールやクラスを定義する時に

module MyPlugin::RubyExtensions::OpenStruct

でなくて

module MyPlugin
module RubyExtensions
module OpenStruct

のやうに記述する
302uy:2011/10/26(水) 02:44:42.04
>>294-296
マジで同意

つうか目次がゴミッカスなだけで、検索結果の表示部分はギリギリ許せる
けどせめてサンプルのソースコードくらい背景色と文字色は変えたほうがいい
Ruby関連の情報は、白・黒・青しか使ってないものがたまにあるけど、色のチョイスがおかしいよ。それ。

あとは目次をさっさと、アルファベット順じゃなくて
機能別順にツリーで並べて一行で縦長にしとけと
アルファベット順で調べたいと思うことなんて早々ねえんだよks
303デフォルトの名無しさん:2011/10/26(水) 08:32:37.16
てか何故青基調なんだろ
それじゃサファイアじゃん
304デフォルトの名無しさん:2011/10/26(水) 08:35:52.60
隔離スレ池
305デフォルトの名無しさん:2011/10/26(水) 08:51:01.50
>>303
ごめんなさい
306デフォルトの名無しさん:2011/10/26(水) 08:51:38.32
間違えた

>>304
ごめんなさい
307デフォルトの名無しさん:2011/10/26(水) 10:32:21.14
るりまになってから、特殊変数の定義が module Kernel のページに入ってるんだけど、
あれは何で?
Kernel の中で定義されている?
308デフォルトの名無しさん:2011/10/26(水) 10:54:36.07
>>307
以前、どこにいったのかと探したなそういえば
そんなとこにあったのか…道理で見つからんワケだ
309デフォルトの名無しさん:2011/10/26(水) 11:11:03.22
おお、やはりほかにも迷った方がいましたか。
「変数と定数」の「組み込み変数」のところに Kernel へのリンクがあるので
一応辿れないことはないんですが、わかりにくいですよね。

というか、「これらを組み込み変数と呼びます」と書いたそばから、
「詳細は Kernel の特殊変数を参照してください」と書いてあって、
「組み込み変数」なのか「特殊変数」なのかどっちやねん、って感じです。
310デフォルトの名無しさん:2011/10/26(水) 14:05:06.05
オンラインでrubyを実行できるwebサービスってありませんか?
pythonでいうとhttp://people.csail.mit.edu/pgbovine/python/tutor.html#mode=editみたいのです
311デフォルトの名無しさん:2011/10/26(水) 14:21:43.00
http://ideone.com/
http://codepad.org/
http://colabv6.dan.co.jp/lleval.html

このへん?
たぶん他にもあると思う。
312デフォルトの名無しさん:2011/10/26(水) 14:53:50.93
例えばhttp://code.google.com/apis/ajax/playground/みたいなのです
codepadやideoneのようにコードをサーバに投稿するものではなくオンラインで実行できるだけのものを探しております
3番目のようなものでこれのコードの結果だけを返してくれるものございませんか?
313デフォルトの名無しさん:2011/10/26(水) 18:16:40.29
そんな怖いサービスはない
具体的に何をしたいのか言え

$SAFEがもうちょっとマシならもしかしたら何年かあとにはあるかもしれないが、
どちらにしてもできることは極めて限られるだろう
314デフォルトの名無しさん:2011/10/26(水) 18:27:47.07
何年かあとにそもそも$SAFEが残っているか微妙な希ガス
315デフォルトの名無しさん:2011/10/26(水) 19:15:00.89
何年もかけて$SAFEがこれだという表現のほうが適切かと思う
こういうのはふつうは「企画倒れ」とかなんとか呼ぶ
316デフォルトの名無しさん:2011/10/26(水) 20:12:51.39
jail とかで頑張らないといけないから大変なんだよな
317デフォルトの名無しさん:2011/10/26(水) 20:43:19.69

Sinatraのbeforeフィルタ内でrequest.path_infoを書き換えると
ルーティングを変更出来るのですが、Padrinoでは変化しませんでした。
Padrinoのbeforeフィルタ内でルーティングを変更する方法があれば教えてください。

/hoge/へのアクセスは get '/' 、/book/hoge/ は get '/book/'
といった感じに割り当てたいです。

Sinatraでは
before do
@hoge = true if request.path_info =~ %r[/hoge/]
request.path_info.sub!("hoge/", '')
end
get '/' { @hoge ? "hoge" : "fuga" }
としていました。
318デフォルトの名無しさん:2011/10/26(水) 20:46:42.64
定番は英語公式からもリンクされてる tryruby.org じゃねーの?
まぁ、irbになっちゃうけど。
319デフォルトの名無しさん:2011/10/26(水) 21:41:34.65
いえ、ただブラウザで実行したいだけです
本当のRubyをブラウザで実行するわけではありません
googleのplaygroundみたいにブラウザでコード張って実行したら結果が出るのがいいのです
javascriptでそういうのを実装したものが合ったんですがブックマークをけしてしま
320デフォルトの名無しさん:2011/10/26(水) 21:45:13.92
tryrubyはなんか出力がおかしいね
> 5.times { puts "hell­o" }
=> "hellohellohellohellohello"

>>319
上であがってるリンクではどこが不足なのかを説明したほうがいいよ
321デフォルトの名無しさん:2011/10/26(水) 22:04:43.53
>>319
もしかして、クライアントサイドでRubyScript動かしたいってこと?
それとも、サーバ上でコンソール向けスクリプト実行して
結果を返して欲しいの?
322デフォルトの名無しさん:2011/10/26(水) 22:42:48.41
>>311さんの3番目のようなものです
323デフォルトの名無しさん:2011/10/26(水) 22:57:50.89
じゃあその3番目を使えばいいと思うんだけど、
もしかして自分が借りてるサーバなどで動かしたいということ?
324デフォルトの名無しさん:2011/10/26(水) 23:33:56.09
アフィリエイト狙いだろ。全部言わせんな恥ずかしい
325デフォルトの名無しさん:2011/10/26(水) 23:41:24.57
それについては>>312のとおりです
326uy:2011/10/27(木) 01:52:46.71
質問者とブラウザーのことはさておいといて
お前ら理解力なさすぎ

俺なんて1レスでわかったわ
質問者がブラウザーを理解してないってことが。


あのな質問者
お前の言ってることは、ブラウザーのウェブアプリケーションデザインの問題

ブラウザーにコードかいて実行押したときに、別ページにとんでブラウザーに実行結果が出るのと
同じページに実行結果が出るのは、ブラウザーに表示されたHTMLの外観の作り方の問題なだけであって、中身(ブラウザーの外)は同じ

こいつらはブラウザーのオフライン環境では動かない。サーバーと通信してる  サーバー側にあるruby.exeが実行されてその結果が出るだけ(ブラウザーではない)
セキュリティ何も考えなくていいなら、君でも作れるよ


こいつらは例外なくブラウザーではなくCGIで動いてる。ブラウザーのJavaScriptで動かすと、たとえば無限ループのプログラムをRunさせちゃったときに
ブラウザごとフリーズするからな。サーバー側では基本、N秒以上経ってもプログラムが終わっていなければそのプロセスをkillするようになってる(ブラウザーとはちがう)


つまり、何が言いたいかというと、codepadで我慢しろ
327デフォルトの名無しさん:2011/10/27(木) 03:27:27.87
>サーバに投稿するものではなくオンラインで実行できるだけ

「オンラインで」は「サーバーと通信して」と理解するのがたぶん適切だと思うんだけど、
質問者は単に「ブラウザ上で」という意味で使ってる?
だとしたら>>321の「クライアントサイドでRubyScript動かしたい」が正解だよな。
ちなみに>>310>>311の三番目もサーバーにスクリプトを送信して実行結果を受け取って表示してる。

JavaScriptで実装したRubyは適当にググっただけでもいくつか見つかるけど
どれも数年前に開発が止まってた。
jslinuxでruby 1.8を動かした人もいたと思う。
lleval(>>311の三番目)はサーバーと通信するタイプだがAPIも公開してる。
328デフォルトの名無しさん:2011/10/27(木) 10:37:54.59
いやだからその実行するものはRubyでなくてもいいんですよ
もういいです
329デフォルトの名無しさん:2011/10/27(木) 10:39:47.47
>>311さんのみありがとうございました
見つかりました
http://repl.it/
330デフォルトの名無しさん:2011/10/27(木) 11:29:30.33
> いやだからその実行するものはRubyでなくてもいいんですよ

一番重要な情報を最後に出すなボケカス。
それを改めない限り二度とネット掲示板で質問するな。言語の種類関係なく。
331デフォルトの名無しさん:2011/10/27(木) 11:35:04.87
>330
別に一番重要な情報じゃないだろw
332uy:2011/10/27(木) 12:34:34.44
ブラウザーのことなんもしらないんだな
333デフォルトの名無しさん:2011/10/27(木) 12:41:07.71
そういうサービスを知ってるものとしては分るけど>>327とか>>330のような使ったことない人には何言ってるかわからないんだろう
334デフォルトの名無しさん:2011/10/27(木) 12:57:14.52
俺はブラウザーのことならなにからなにまで知ってるぜ。
335デフォルトの名無しさん:2011/10/27(木) 13:05:06.04
概念があいまいだからか、
言葉もあいまいで不正確だから誤解を招く
336デフォルトの名無しさん:2011/10/27(木) 15:01:20.92
>>334
>なにからなにまで知ってるぜ。

"なに" - "なに" = ゼロ
337デフォルトの名無しさん:2011/10/27(木) 15:09:12.14
この場合、

なに・・・x1
なに・・・x2

と考える方が妥当では
338デフォルトの名無しさん:2011/10/27(木) 15:12:38.90
それだとマイナスも有り得る。
339デフォルトの名無しさん:2011/10/27(木) 15:18:12.58
NaN..NaN # => ArgumentError: bad value for range
340デフォルトの名無しさん:2011/10/27(木) 15:38:07.72
ちょっと面白かった
341デフォルトの名無しさん:2011/10/27(木) 19:39:14.70
TCPから勉強した方がいいと思うよ
342uy:2011/10/27(木) 23:46:05.22
>>334
ActivXってそれをインストールすると
ページにアクセスした時点でクライアント側のexeを実行させたりする事も可能になってるようなんですけど(ハンゲームとか)
これは、仮に正規のページ以外から任意のexe実行させたりされる可能性があると思うんですけどどうなの?
そこら辺ってURLか、何らかのパスワード的なものでチェックかけてんだと思うけど、偽装される可能性は?
cmd起動出来るならなんでもやられちゃうと思うんだけど?
343300:2011/10/29(土) 09:55:01.08
>> 301
報告遅れてすいません
うまく動きました!
344デフォルトの名無しさん:2011/10/29(土) 13:42:41.78
このスレって著名なブロガーとか技術者とかRubyの開発者も見てるよね
たまにしょぼい回答者もちらほらみかけるが全体的に回答者(ほとんど数名の方が回答しまくってるのかもしれないが)の質が高いよここ
345デフォルトの名無しさん:2011/10/29(土) 13:55:12.73
ひとりかふたりレベルの違う人がいるね
ちょっとググったぐらいじゃ答えられない質問になると答えてる
いつもほんの数行だし記名性のない文章だから気付きにくいけど
346デフォルトの名無しさん:2011/10/29(土) 16:29:35.74
いやあそれほどでもって言っておけばいいのかな
347デフォルトの名無しさん:2011/10/29(土) 16:45:56.96
うむ、毎回長い俺は違うな
348デフォルトの名無しさん:2011/10/29(土) 19:15:31.22
スレで煽られてヘソ曲げちゃった人とかいるしな
349デフォルトの名無しさん:2011/10/29(土) 20:53:40.14
ろくに理解も出来ないのに無理に回答するやつはうざい
350デフォルトの名無しさん:2011/10/29(土) 23:08:01.81
windowsのコマンドラインから実行したとき、ctrl+zが押されたときに特定の処理をやりたいのですが
押されたか知る方法はございませんか?
351uy:2011/10/30(日) 01:54:57.76
>>344
開発者気取りの成りすましレスなら見たことある
2chにしてはマシってだけで、まだ全然低いだろ 贅沢? 俺は贅沢だ
確かに少しググった程度じゃ「今は」見つからない情報っていうのはあるけど、
それは1年前や3年前のGoogleだったら検索に引っかかりやすかった可能性はあるのでなんとも
あとは英語版Googleとか Google SorceCodeSearchだな

あと、スレ盛り上げる為か何か知らないけど
自分で質問して自分で回答してる奴がいるのもわかってるからね?
あえてスルーしてあげてるだけだからね?
uyのネット匿名カテゴリにおけるinsightをあまりなめてはいけない
352デフォルトの名無しさん:2011/10/30(日) 06:48:02.96
ございますん
353デフォルトの名無しさん:2011/10/30(日) 06:59:24.88
>>350
通常Ctrl+Z(とEnter)を押してもRubyに渡る前に
コマンドプロンプトがCtrl+Zを処理してしまうからRubyにまでは届かない
ただファイル末端に到達したことを検知するだけなら

begin
  loop { puts readline }
rescue EOFError => e
  $stderr.puts "stream reached EOF"
end

処理を途中で終了したいとかならCtrl+ZでなくCtrl+Cにして>>165のようにする
これで足りなきゃCtrl+Zを検知したい理由や押すときの状況なんかを詳しく書くといいかも
354デフォルトの名無しさん:2011/10/30(日) 07:52:03.21
#状況がわからんけど、例えばこんなのではどうか?
require 'Win32API'
def getch
_getch = Win32API.new('msvcrt','_getch','V','I')
kc = _getch.call
if kc == 0 or kc == 0xE0
kc = _getch.call | 0x100
end
kc
end
def kbhit?
!Win32API.new('msvcrt','_kbhit','V','I').call.zero?
end
def sleep_or_keywait(t, keycode=nil)
start = Time.now.to_f
while Time.now.to_f - start < t
if kbhit?
kc = getch
return kc if !keycode or kc == keycode
end
sleep 0.01
end
nil
end

100.times do |i|
puts i
break if sleep_or_keywait(0.5, 26)
end
355デフォルトの名無しさん:2011/10/30(日) 08:41:06.48
def fact(n)
n == 1 ? n : n * fact(n - 1)
end

p fact(8188)

rubyってどこまでデカイ数扱えるのかなと思って試してみた
8188までいけた、これよりデカイ数を求めたくなった場合はどうしたらいいの?
356デフォルトの名無しさん:2011/10/30(日) 08:42:10.59
BigBigNum でも自分で作れば?
357デフォルトの名無しさん:2011/10/30(日) 09:36:08.85
>>355
再帰だとスタック食い潰しちゃうから再帰を使わずに書く
358デフォルトの名無しさん:2011/10/30(日) 09:46:24.36
確かに試してみると
SystemStackError: stack level too deep
で落ちてるな

デカイ数を試すテストになってねぇじゃねぇかw
359デフォルトの名無しさん:2011/10/30(日) 10:10:13.69
再起なんて使うな!計算機の都合を考えろ!

ひどい言い草だな。Steve Jobsの前で行ったらその場でクビになるレヴェル。
360デフォルトの名無しさん:2011/10/30(日) 10:13:28.11
は?

クビになるのはてめぇだぞ。それを実行するユーザーに無限のメモリ増設を
要求するプログラムを作った、という罪で。
361デフォルトの名無しさん:2011/10/30(日) 10:31:50.72
真面目な話1.9でコンパイル済みのRubyのスタックサイズを増やす方法はあるのかな
1.8ならuname -s (Linux/bash) でいけるらしいけど
362デフォルトの名無しさん:2011/10/30(日) 10:35:01.12
PHPのcurl関数に相当する機能はRubyでは標準で用意されてないのですか?
のこぎりとか使わないとだめですか?
363デフォルトの名無しさん:2011/10/30(日) 10:43:32.60
curl 関数ってなんじゃらほ
PHP は ibcurl サポートがデフォルトで組み込まれてたりなんかするんか

>PHP を cURL サポート機能付きでコンパイルすると、 curl 関数を使用可能となります。

うへぇマジだ

>>362
HTTP の送信メソッドを操作する基礎的なライブラリ Net::HTTP と、GET だけするライブラリ open-URI はあるが、
Web ブラウザやダウンローダとしてヘッダやデータを扱う複雑なライブラリは標準では存在しない
gem では Mechanize が、libcurl を呼ぶ gem としては curb なんかがある
364デフォルトの名無しさん:2011/10/30(日) 10:55:22.40
ありがとうございます
日本語情報が多いMechanize使って見たいと思います
ちょっとずつPHPのコードをRubyに移植しながら勉強していきたいと思います
365デフォルトの名無しさん:2011/10/30(日) 10:58:28.97
PHPは最初からWeb用にできてる言語でしょ?
Rubyが標準で持ってない機能なんてたくさんありそうだな
366デフォルトの名無しさん:2011/10/30(日) 11:09:08.17
>>361
> コンパイル済みのRubyのスタックサイズを増やす
MS-DOS の EXE ファイルじゃあるまいしw

ていうかunameじゃなくてulimitかな? それはプロセスの属性であって、
実行可能バイナリの属性じゃない。

>>365
Rubyの「標準添付ライブラリ」に相当するものが、なんでもかんでも組み込みで
グローバル名前空間に存在してることを自慢する人たちだから、競争したらダメw
367デフォルトの名無しさん:2011/10/30(日) 11:10:11.19
>>361
/* each thread has this size stack : 128KB */
#define RUBY_VM_THREAD_STACK_SIZE (128 * 1024)

などとハードコーディングされてるっぽいよ
368デフォルトの名無しさん:2011/10/30(日) 11:17:06.27
>>366
Rubyも組み込みライブラリが結構デカいと思うから
そこは別に言われても気にしないな
問題はライブラリじゃなくて言語本体の微妙な感じ
369デフォルトの名無しさん:2011/10/30(日) 11:37:53.22
>>366
> ていうかunameじゃなくてulimitかな? 
どもども。単純にボケた

>>367
ソース眺めた感じではあとから変更はできなそうだね
(自分が読み間違えしてなければ)
どうもありがとう
370デフォルトの名無しさん:2011/10/30(日) 11:47:02.09
>>355
↓こういうやり方もあるね。
http://d.hatena.ne.jp/athos/20110119/p1
371デフォルトの名無しさん:2011/10/30(日) 11:59:45.52
injectで書くのとwhileループまわすのとどっちが速いんだ?
自分で試すの面倒だから誰か試して
372デフォルトの名無しさん:2011/10/30(日) 12:14:04.71
>>371 単純に数値の配列の合計求めるとこうなった

require 'benchmark'
Benchmark.bm(10) do |x|
list = (1 ... 1000000).to_a
x.report("while_test:") {
len = list.length
sum = 0
i = 0
while i < len
sum += list[i]
i += 1
end
puts sum
}
x.report("inject_test:") {
puts list.inject(0, &:+)
}
end



ruby 1.9.2p180 (2011-02-18) [i386-mingw32]
user system total real
while_test:499999500000
0.625000 0.000000 0.625000 ( 0.625000)
inject_test:499999500000
0.719000 0.000000 0.719000 ( 0.718750)
373デフォルトの名無しさん:2011/10/30(日) 12:22:42.19
コードを実行したときにRubyに割り当てられた使用量を取得する方法はございませんか?
こういうのですhttp://php.net/manual/ja/function.memory-get-usage.php
374デフォルトの名無しさん:2011/10/30(日) 12:24:17.19
>>373
それはないです
少なくとも一般に知られている妥当動作のものはない

あるべきだと思うんだけども
375デフォルトの名無しさん:2011/10/30(日) 12:26:40.05
>>371
単純なものならwhileのほうが絶対的に速い
ただし、実際に処理をループ内にいろいろ詰め込んだ場合は不定

というか、whileやeachで平易に書けるならinject使う理由がねえ
376デフォルトの名無しさん:2011/10/30(日) 12:27:56.36
松本さんの知り合いだったら俺がメモリ関係の件を実装しろっていいたい
377デフォルトの名無しさん:2011/10/30(日) 12:29:11.39
あのRubyのマニュアルを作りたいのですけど
マニュアルを作るさいのライセンスは何を使えば良いのですか?
378デフォルトの名無しさん:2011/10/30(日) 12:41:59.50
ソースコードを引用することもあるんで、一般論としては本体に揃えるのが無難ではある
まったく別の権利体系にすることももちろん可能だが(電子書籍で売ったっていい)、
こんなとこでこんなこと聞いてる時点でそのへんは不可能だろう
379デフォルトの名無しさん:2011/10/30(日) 12:46:50.68
まじで、是非是非いいマニュアルを作って欲しい
380デフォルトの名無しさん:2011/10/30(日) 12:50:21.95
>>379
無理無理
今本当に必要なのはマニュアル内容よりもマニュアル分類だもの

全ての添付ライブラリの分野に精通してるなんて現実的ではないし(Cのソケット通信やSSLのコードを理解できますか?)、
既存のマニュアルを分類し直すのが一番安心確実高利回り
それに手をつけないってことは、つまり、モヤモヤ妄想しているだけで、本当は何も考えてないってことだ
381デフォルトの名無しさん:2011/10/30(日) 12:55:36.72
分類は必要ないかな
別に今のマニュアルでも不便はない
382デフォルトの名無しさん:2011/10/30(日) 13:01:45.93
>>381
それは現在の悪い状態に慣れてしまった結果ではある

上にもあったが、普段の作業の大部分が自動化されることが大前提なので(手作業は文章の差分程度)、
そのへんがどうにかされないなら(HTMLを毎回手書きとか!)るりま以下が確定なので誰も参加しないし誰も利用しないだろう
http://redmine.ruby-lang.org/projects/rurema/activity
383デフォルトの名無しさん:2011/10/30(日) 13:07:06.26
本当に欲しいのは初心者ガイドや初心者用逆引きシステムであって、別のマニュアルではないよね
384デフォルトの名無しさん:2011/10/30(日) 13:18:35.34
るりまサーチで十分
初心者は1冊本を買えばいい
385デフォルトの名無しさん:2011/10/30(日) 13:20:15.70
レシピブック初版から買い替えたいけど時期的に中途半端すぎて買えねえお
386デフォルトの名無しさん:2011/10/30(日) 13:52:33.11
とりあえずchmが以前のやつに近くなればいい
387デフォルトの名無しさん:2011/10/30(日) 14:07:11.62
>>386
それは思う
緊急的にどうにかなんないもんかしら
388デフォルトの名無しさん:2011/10/30(日) 14:10:43.63
すげー読みやすくなってんじゃん
まったく変化に弱い連中だなw
389デフォルトの名無しさん:2011/10/30(日) 18:12:55.92
>>357
>>358
なるほどスタック領域とやらを食いつぶして死んでただけなのか勉強になるなあ
でもこれ以外のメモリの使い方がよく分からん
例えば配列をドカッと確保したらそれはスタックではないから大容量使えるって事なのか?
390デフォルトの名無しさん:2011/10/30(日) 18:23:39.28
スタックはスタックだ
…説明めんどくさいな、いわゆる一般的に言われるメモリ領域とは違…うん、まあ、違う
瞬間的な処理予約数っていうのがシステムの制限由来で決まってて、再帰は再帰ループが終わるまでその予約数を1つずつ使用する
再帰のようなものや無限ループでなければ、スタックを食い潰すようなことはない
もちろんシステムのメモリの制限があるが、その制限しかないとも言える
配列の要素数や文字列の長さは、システムのメモリの制限しか受けない
391デフォルトの名無しさん:2011/10/30(日) 19:59:17.71
>>374
GC.malloc_allocated_size
GC.malloc_allocations
ってのがソースには存在するけど
デフォルトでは無効化されてる

有効にして再コンパイルすると使えるのかな?
でも有効にすると性能低下があるのかもしれない

どういう機能なのかはわからんけど
392デフォルトの名無しさん:2011/10/31(月) 00:59:27.72
Rubyはインストールできたけど、Railsが入らない。
393デフォルトの名無しさん:2011/10/31(月) 01:33:08.34
requireについて質問です。

require "foo"

require 'foo'

のように、○○の部分を''で囲むのと""で囲むのとの違いは何でしょうか。
入門書では""で囲っているのですが、web上には''で囲っているサンプルコードもあり、よくわからなくなりました。
どちらで囲うのが正しいのでしょうか、或いは場合によって使い分けるのでしょうか。
394デフォルトの名無しさん:2011/10/31(月) 01:36:17.98
途中で書きなおした結果、一部文章が変に・・・orz
>>393
>のように、○○の部分を''で囲むのと""で囲むのとの違いは何でしょうか。
という行の「○○」の部分はfooと書くつもりでした。
395デフォルトの名無しさん:2011/10/31(月) 02:16:25.02
>>393
どちらも文字列リテラル
ttp://doc.ruby-lang.org/ja/1.9.2/doc/spec=2fliteral.html#string
ここの文字列リテラルの所とリンクされてるバックスラッシュ記法、式展開を読んで
どう使い分けるかを考えよう
396uy:2011/10/31(月) 03:50:53.22
使い分けなくても良い

個人的にはreuireだけ''で他は大体""でやっている
ひとつだけ言えば、全部''でやったら死ねって思うけど
全部""だったら別に有り
基本""でやって''でやったほうが良い箇所を見つけたら''使えば良いレベル
397デフォルトの名無しさん:2011/10/31(月) 04:27:57.02
https://www.ruby-toolbox.com/

最近知ったんだが便利すぎデザインに気合入りすぎでワロタ
るびまもこんな感じのギラギラしたデザインにしようぜ
398デフォルトの名無しさん:2011/10/31(月) 06:25:02.97
グロ中尉
399デフォルトの名無しさん:2011/10/31(月) 07:19:32.67
>>395,>>396
ありがとうございます。
>>395
式展開が使えるので""で囲んだほうが柔軟、という表現が正しいのかはわかりませんが
そんな感じなんだなという風に理解しました。
>>396
思いは書かれているのですが理由がなく・・・すいません、よくわかりません。
400デフォルトの名無しさん:2011/10/31(月) 07:33:05.26
require :foo
サポートしたら絶対流行る
401デフォルトの名無しさん:2011/10/31(月) 07:38:10.19
>>399
…そう読めるなあ
式展開 #{うめこみ} を使用しないなら、使用しないという意図がわかるように、誤爆が起こり得ないように 'シングルクォート' で囲む
というのが一般的
「式展開しないならダブルクォート使ってんじゃねーよ!」「うっせーアスペ!」とかいうケンカが稀にある程度

実際にはまあどうでもいいので(Rubyの式展開自体、どんなエディタでも目立って存在がわかる)、好きにするといい
なんでもダブルクォートで囲むのはPerlの人かなとも思う
402デフォルトの名無しさん:2011/10/31(月) 08:10:46.45
>>401
ありがとうございます、''には誤爆防止という事もあるんですね
403デフォルトの名無しさん:2011/10/31(月) 08:22:50.72
Perlでダブルクォートが多用されるのは、ダブルクォートのほうが文字列として認識しやすいのと、
シングルクォートだとバッククォートと見分けがつきにくいという理由から。

Perlを踏襲してるRubyでも同じことが言えるかもしれないけど。
404デフォルトの名無しさん:2011/10/31(月) 08:28:09.77
原則ダブルクォートで、特に展開しないという意図を示す時には
シングルっていうルールでやってるが、
まあよく考えたら逆でも問題ない気がする
405デフォルトの名無しさん:2011/10/31(月) 13:20:30.88
Perlだと'++' "\+\+"
406uy:2011/10/31(月) 17:51:25.58
ダブルクオートでかいて
誤爆したことあんの? っていう
407デフォルトの名無しさん:2011/10/31(月) 21:05:56.47
俺はシングルが基本だな
Windows環境で使うと自然とシングルになると思うw
408デフォルトの名無しさん:2011/10/31(月) 21:14:44.24
シングルでもバックスラッシュ書くのは面倒
エスケープの無い文字列リテラル希望
409デフォルトの名無しさん:2011/10/31(月) 23:34:09.81
>>408
rubyはじめたころは:hogehogeで文字列リテラル書けるかーと勘違いしていた
410デフォルトの名無しさん:2011/11/01(火) 00:07:16.83
このスレの先輩方からみてphp言語に足りないものを教えてください
411デフォルトの名無しさん:2011/11/01(火) 00:17:13.64
知性
412デフォルトの名無しさん:2011/11/01(火) 00:56:12.64
クラス定義のエクスポートみたいなことできるでしょうか?

中身が(私の頭では)理解できないライブラリ hoge.rb がありまして
スクリプト中で

require 'hoge'
Hoge.operation

としてメソッド実行すると、動的にクラスFugaが定義されます。
このFugaクラスのインスタンスを生成した後で Marshal.dump の
結果を外部ファイルに保存し、後で別のスクリプトからそれを Marshal.load
して使うということを考えていたのですが
... undefined class/module ...
ということで、どうもFugaクラスの定義がないとダメなようでして。




413デフォルトの名無しさん:2011/11/01(火) 05:13:59.55
>>412
その別のスクリプトで

require 'hoge'
Hoge.operation

をやればいいだけだと思うんだけど、それが出来ない理由が有るの?
414デフォルトの名無しさん:2011/11/01(火) 07:29:03.78
>>412

その別のスクリプトには、Fugaの定義が書かれていないんだから、
定義がないよと言われるのは当然の事なのです。
>>413のように別スクリプトで改めて、require 'hoge'して
Fugaの定義を読み込むのが解決策です。
415412:2011/11/01(火) 09:25:09.89
Hoge#operation がけっこう重たい処理を含んでいまして、クラス定義だけ抜き出したいところなのですがソース眺めてもチンプンカンプンというしだいです。

具体的には gem databasedotcom の Databasedotcom::Client#query なんですが。
416デフォルトの名無しさん:2011/11/01(火) 09:38:03.98
>>412
インスタンスを復元したいだけなら undefined class/module が出たクラスを

class Fuga ; end
class Hoge ; end
class Hage ; end
class Page ; end

みたいに空の定義を書けば復元できる(かもしれない)
ただし復元出来ても元で定義されてたメソッドとかは当然使えない
観念してソース読んだ方がいいよ
417デフォルトの名無しさん:2011/11/01(火) 10:37:37.94
>>415(>>412)
こんながあるけど、コードリーディングに何か役立つかな?

http://www.h6.dion.ne.jp/~machan/tmdoc/example/databasedotcom/html/
418デフォルトの名無しさん:2011/11/01(火) 17:50:22.49
質問です。再帰処理を行いたいのですが、
メソッドを定義せずにワンライナー的に処理を行う方法はありますか?
419デフォルトの名無しさん:2011/11/01(火) 18:37:36.00
>>418
ありません
420デフォルトの名無しさん:2011/11/01(火) 18:38:28.44
>>419
そうですか。ありがとうございました
421デフォルトの名無しさん:2011/11/01(火) 18:43:03.68
ラムダ式の引数にラムダ式を与えるってのはだめか?
ださいけど
422デフォルトの名無しさん:2011/11/01(火) 18:51:09.76
そりゃYコンビネータで出来るけど、ここ初心者スレだし、
ブロックとメソッドの違いとか面倒だし、おすすめできない。
423デフォルトの名無しさん:2011/11/01(火) 19:00:26.12
ここで欲しいものは「なんかあてはめだけで1行で書ける再帰記述法」だろう
そういうようなものは、残念ながらない

複雑でめんどい概念のもので再現可能だとしても、それはきっと要件を満たさないはず
424デフォルトの名無しさん:2011/11/01(火) 20:44:21.82
本当にやりたかったのは再帰処理じゃなくってruby -nだったりとか
425デフォルトの名無しさん:2011/11/01(火) 21:50:40.49
ふつうにラムダ自身を代入したローカル変数をラムダ内で呼んで再帰させればいいんじゃ
fib = lambda{|n| (n==0 || n == 1) ? 1 : fib.call(n-1) + fib.call(n-2)}
fib.call(10) # => 89

ローカル変数も禁止だとすると
今のRubyには存在しない__callee__みたいな感じでラムダ自身を返すものでもないと無理だろうけど

あらかじめこんなメソッドを作っておいてもいいのなら
定義と実行はワンライナーで書ける
def foo(*a)
innerblock = proc{|*b| yield innerblock,*b}
yield innerblock,*a
end

foo(10){|f,n| (n==0 || n == 1) ? 1 : f.call(n-1) + f.call(n-2)} # => 89
426デフォルトの名無しさん:2011/11/01(火) 22:05:32.02
とりあえずYコンビネータ置いときますね。
->(f){->(g){f[->(x){ g[g][x]}]}[->(h){ f[->(y){h[h][y]}]}]}[
->(f){->(n){ n==0 ? 1 : n*f[n-1] } }
][10]
427412:2011/11/01(火) 22:22:39.90
どうもありがとうございます > 413,414,416,417

ソースを眺めたところ Class.new + α して動的にクラス定義するメソッドがあったので、
これを使って必要なクラスを用意してから Marshal.load したらできました。
428デフォルトの名無しさん:2011/11/01(火) 22:53:52.95
>>374
1.9.3がでたのでコンパイルするついでに
CALC_EXACT_MALLOC_SIZEを有効にしたのもコンパイルしてみた
GC.malloc_allocated_sizeで
Rubyが確保したメモリサイズがわかるのかな

でっかい文字列とかを作るとその分増えて
そいつの参照を切ってGC.startすると
文字列がゴミ回収されて
GC.malloc_allocated_sizeが減る
429デフォルトの名無しさん:2011/11/01(火) 22:54:23.35
呼び出し方がいけてないけど、こんなAlambdaみたいなのを定義しとくと
書ける気がする。。ちょっと無理があるか。

class Alambda
def initialize(b); @proc = b; end
class << self
def alambda(&b)
obj = Alambda.new(b)
lambda{|*args| obj.instance_exec(*args, &b)}
end
end
def method_missing(action, *args)
instance_exec(*args, &@proc) if action == :this
end
end
fact = Alambda.alambda do |i|
i == 0 ? 1 : i * this(i - 1)
end
puts fact[5] #=> 120
430429:2011/11/01(火) 23:03:57.36
これでも同じか。

class Alambda
def initialize(&b); @proc = b; end
def [](*args)
instance_exec(*args, &@proc)
end
def method_missing(action, *args)
instance_exec(*args, &@proc) if action == :this
end
end
fact = Alambda.new do |i|
i == 0 ? 1 : i * this(i - 1)
end
puts fact[5] #=> 120
431デフォルトの名無しさん:2011/11/01(火) 23:29:11.60
lambda{|f,v| f[f,v]}[lambda{|f,v| (v<=1) ? 1 : f[f,v-1] + f[f,v-2]}, 10]
引数が増えるのが難点だけど
432デフォルトの名無しさん:2011/11/02(水) 07:25:44.67
すみません。
ruby1.9系の勉強をしたいと思っていますが、ネットでお勧めのページはありますか?
基本的な文法からMix-in、例外処理、ネットワーク処理、ファイル入出力など細かいところまで一通り解説があると助かります。
よろしくお願いいたします。
433デフォルトの名無しさん:2011/11/02(水) 17:26:55.95
>>432
9割くらいは1.8系列と一緒なので、適当な1.8解説サイト読め
434デフォルトの名無しさん:2011/11/02(水) 18:40:24.85
ネットじゃなく本を読め
435デフォルトの名無しさん:2011/11/02(水) 22:01:30.26
笑わせんなジジイ
436デフォルトの名無しさん:2011/11/02(水) 22:10:34.48
レスどうもです
>>433-434
実は、プログラミングRuby第二版を持っているんですよね
1.8系列について書かれた本ですが、読んで損はないですかね
それとも、ケチらずに1.9系の本買った方がいいかな?
437デフォルトの名無しさん:2011/11/02(水) 22:42:15.97
>>436
持ってるならそれ使って1.8で勉強して
その後変更点や新機能をググればいいかも
438デフォルトの名無しさん:2011/11/03(木) 03:12:13.57
ふざけんなガキ
439uy:2011/11/03(木) 09:52:22.94
再帰lambdaなら
以前俺が簡単な実装かいたじゃん
Rubyの機能として無いんだからやたら複雑な事をやんないで
今はこれで良いと思う

def sss *h
  @@sss_vvv = lambda do |*h| yield *h end if iterator?
  @@sss_vvv.call *h
end

n=sss 4 do | n |
  if n == 0
    1
  else
    n * sss(n - 1)
  end
end
p n

sss 9 do | n |
  sss(n - 1) if n > 0
  sss 9,n do | n , m |
    sss(n - 1 , m) if n > 0
    printf "%3d" , n*m 
  end
  puts
end

2重再帰も可能
440デフォルトの名無しさん:2011/11/03(木) 10:27:47.26
ワンライナー的な、という話は読まないのね相変わらず
441片山博文MZ :2011/11/03(木) 21:30:15.71
俺sugeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!
442デフォルトの名無しさん:2011/11/04(金) 01:07:33.37
CentOS5.7でruby-1.8.7をmakeしたところ
eval.c: In function ‘rb_eval_string_wrap’:
eval.c:1744: 警告: assignment discards qualifiers from pointer target type
のようなwarningが出たんですが問題ないのでしょうか・・・
443デフォルトの名無しさん:2011/11/04(金) 03:45:18.37
テストが通ればいいだろ
444デフォルトの名無しさん:2011/11/04(金) 04:30:46.37
警告だけでコンパイルが終了したなら大丈夫
稀にコンパイルできない人がいるんだが
445デフォルトの名無しさん:2011/11/04(金) 09:30:01.55
いまんとこまだウォーニングゼロは方針にはなってなかったはず
446uy:2011/11/04(金) 11:14:51.51
>>440
そもそも機能がねーって言ってんの

代案があるならソースコード載せろ
447デフォルトの名無しさん:2011/11/04(金) 11:38:23.38
>>440
ワンライナー的に使うなら430にto_procも入れればいいんですかね。
ブロックで書いてる感があるかも。
class Alambda
def initialize(&b); @proc = b; end
def [](*args); instance_exec(*args, &@proc) end
def to_proc; Proc.new{|*args| instance_exec(*args, &@proc)} end
def method_missing(action, *args); instance_exec(*args, &@proc) if action == :this end
end

p [1, 2, 3, 4, 5].map &Alambda.new{|i|
if i == 0
1
else
i * this(i - 1)
end
}
#=>[1, 2, 6, 24, 120]
448片山博文MZ :2011/11/04(金) 18:15:43.40
俺sugeeeeeeeeeeeeeeeeeeeeeeeeeeee!
449デフォルトの名無しさん:2011/11/04(金) 19:14:48.53
gem install jsonでエラーが発生します。
まる一日ググってもわかりませんでした。
どうやったらインストールできるか教えてください。
環境:windows7 64bit、ruby 1.9.3p0、gem 1.8.11
以下エラーメッセージ-----------------------------------------------------------
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
ERROR: Error installing json:
ERROR: Failed to build gem native extension.

C:/Ruby193/bin/ruby.exe extconf.rb
checking for re.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/Ruby193/bin/ruby
C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to genera
te an executable file. (RuntimeError)
You have to install development tools first.
450デフォルトの名無しさん:2011/11/04(金) 19:41:41.79
書いてあるそのまんまだと思うのだが
っていうかなんでわざわざ初心者がRubyInstaller使うかね
451デフォルトの名無しさん:2011/11/04(金) 19:44:30.88
gemで入れなくても最初から入ってるじゃんjson
452デフォルトの名無しさん:2011/11/04(金) 19:58:31.30
Ruby1.9.2用のRailsのインストールの手順とかそのままなぞってるんだと思うにゃん
本当に丸一日ぐぐって解法に辿りつけなかったんだったらプログラミングやめたほうがいいかもと親切心で思う

RubyInstaller(MInGW)でインストールしたなら、DevKitが要る
おそらく、どっかの誰かがうっかり間違ってパッケージングしてるってだけで、
DevKitが要らない解決法もあるのだと思うのだが、
こんなことが起こるたびにどっかの誰かの修正リアクションを待ってなんていられないので、
自前でDevKitをインストールしてコンパイル可能にしておいてしまうのが簡便な解決法

DevKitはRubyInstallerのサイトからダウンロードできる
453デフォルトの名無しさん:2011/11/04(金) 20:05:37.92
メッセージ見るとdevkitは入ってるでしょ
Makefile作る時点でコケてる
454デフォルトの名無しさん:2011/11/04(金) 20:21:24.37
ruby/re.h をコピーするの?
どっちにしても Ruby 1.9.2 ならあっさり成功するよかん
455449:2011/11/04(金) 20:40:02.05
みなさん回答ありがとうございます。
>>450
One-Click Installerは1.9対応していないみたいなので。

>>451
説明不足でした。
jsonを入れたいわけではなくrailsをインストールするときjsonで落ちていて困っているのです。

>>452
DevKitはインストール済みです。

>>453
Makefile作る時にこけるとすればどのような解決策があるかご存知ですか?

456デフォルトの名無しさん:2011/11/04(金) 20:44:41.42
rubyinstaller再インストールしてみたら
457デフォルトの名無しさん:2011/11/04(金) 20:45:47.13
・rubyはwindowsに対応していません。
458デフォルトの名無しさん:2011/11/04(金) 20:54:39.99
Ruby 1.9.3 が新し過ぎてなんかどっかが対応してないのだろ
459デフォルトの名無しさん:2011/11/04(金) 20:57:05.18
xp32bitでは普通にできたぞ
460449:2011/11/04(金) 21:01:13.94
>>456 458
1.9.2の再インストールで解決しました。
ありがとうございました!
461デフォルトの名無しさん:2011/11/04(金) 21:01:37.52
何かディレクトリいじったんだろうね
462デフォルトの名無しさん:2011/11/04(金) 22:14:20.79
json_pure を require している gem は特にこだわりがないのなら json に
切り替えて欲しいな。
463デフォルトの名無しさん:2011/11/05(土) 07:38:53.51
いきなりコロンコロンから始まるクラス名ってどういう意味があるのでしょうか
エロイ人教えてください
464デフォルトの名無しさん:2011/11/05(土) 08:29:26.45
>>463
いわゆるトップレベル。

class Foo
end

module Bar
class Foo
end

p Foo # => Bar::Foo
p ::Foo # => Foo
end
465デフォルトの名無しさん:2011/11/05(土) 09:32:57.60
>>464

よくわかりました。
ありがとうございます
466デフォルトの名無しさん:2011/11/05(土) 13:06:06.61
1.9.2からrequire_relativeというのが導入されたみたいだけど、これってrequireとどう違うの?
ぐぐってもわかりやすい説明がでてこないし。
$: に「.」が含まれなくなったことと関係しているらしいことまではわかったけど、
「.」が含まれなくなったことと、require_relativeがどう関係しているのかわからん。
467デフォルトの名無しさん:2011/11/05(土) 13:51:38.46
同じディレクトリにhoge.rbがあったとして、

require_relative 'hoge'

$:.push "."
require 'hoge'
が同じこと、って意味じゃない。
468デフォルトの名無しさん:2011/11/05(土) 14:00:28.87
ものすごく平たく言うと、引数を丸ごと expand_path して存在を確認してから expand 済みのパスを require してる
結果として、require_relative 'hoge' は require File.expand_path('hoge') にかなり等しい
require_relative は $LOAD_PATH を読まず、カレントディレクトリ(からファイルパス計算した位置)に hoge.rb/.so がなければ LoadError

require_relative 'uri' はカレントディレクトリに uri.rb がないと動かない
1.9.2 以降の require 'uri' は Ruby ロードパスに uri.rb がないと動かない
1.9.1 以前の require 'uri' はカレントディレクトリに uri.rb があればそれを読み、それが無いときにのみ Ruby ロードパスを探す
(そもそも $LOAD_PATH 自体にカレントディレクトリが含まれていたので、この説明は正確ではない)
469デフォルトの名無しさん:2011/11/05(土) 14:00:38.03
uniq!って配列の中が一つしかないとnilになるとか知らなかったわ
470デフォルトの名無しさん:2011/11/05(土) 14:02:20.17
今リファレンス読んだら変更がないときはnilなんだね
スレ汚しすまそ
471デフォルトの名無しさん:2011/11/05(土) 15:20:54.53
破壊型メソッドは成功時にselfを
失敗or何もしなかった時にnilを返すようになってるね

詳しく知らんけどSmalltalkのカスケード式みたいなのがあればと、たまに思う

または、
(tmp = foo.hoge1) && (tmp = tmp.hoge2) && (tmp = tmp.hoge3)
みたいなやつ
失敗しない限りメソッドチェーンを続けるようなもの

foo ||= bar は foo || foo = bar
からの類推で
foo &&. bar を foo && foo.bar にするみたいなのがほしい
実際は (tmp = foo) && (tmp.bar)と同等で
472デフォルトの名無しさん:2011/11/05(土) 18:44:39.98
>>471
有名どころではactive_supportのtryを使えば良いかな

require 'active_support/core_ext'
foo.try(:bar)

473デフォルトの名無しさん:2011/11/05(土) 19:23:41.62
tryは、途中でnilになると式全体がnilになるので、
失敗する寸前のオブジェクトが欲しいときは他の手段が必要だな。

CoffeeScriptの ?. はどんなのだったかな…
474デフォルトの名無しさん:2011/11/05(土) 21:28:24.89
「*は直前の正規表現の0回以上の繰り返しとマッチします。」で以下の二つがマッチする理由がわからないのです

/a*c/ =~ "abc" #=> マッチする
/a*c/ =~ "abcccccc" #=> マッチする

上はマッチする文字列はcの直前の文字がaである必要があるが、bが含まれる
下は繰り返される文字は*の直前のaである必要があるが、cが繰り返されている
それでもマッチするのはどうしてなんでしょうか?
初歩的な質問ですみません。
475デフォルトの名無しさん:2011/11/05(土) 21:38:15.44
aが0回でもいいんだから、cの直前の文字がaである必要はない
476デフォルトの名無しさん:2011/11/05(土) 21:41:56.48
なるほど!
とてもわかりやすいレスありがとうございます!
477デフォルトの名無しさん:2011/11/05(土) 21:42:37.44
>>474
*は欲張りマッチなのでa*cとするとabcccccccと来て、ここで最後のcがマッチして検索終了となる。
*?で非欲張りマッチにするか、cにマッチしたくなかったら肯定先読みとか使う
478デフォルトの名無しさん:2011/11/05(土) 21:43:22.03
>>474
/a*c/という正規表現リテラルは
"abc"というマッチ対象文字列の"c"にマッチし
"abcccccc"というマッチ対象文字列の"abc"にマッチするということ
479474:2011/11/05(土) 21:45:06.89
じゃないよまったく
"abcccccc"というマッチ対象文字列の"c"にマッチする、の誤り
480デフォルトの名無しさん:2011/11/05(土) 21:54:39.04
おちけつ
481デフォルトの名無しさん:2011/11/06(日) 05:07:32.11
>>467
$:.unshift "."
ではなくて
$:push "."
なの?

>>468
そこでいう「カレントディレクトリ」って、プロセスの?
それとも「require 'hoge'」が書かれてあるファイルが置かれているディレクトリのこと?
前者なら、require_relative 'hoge' した場合、プロセスのカレントディレクトリが変わると、読み込まれる hoge.rb の位置も変わる。
後者なら、プロセスのカレントディレクトリの位置によらず、読み込まれるhoge.rbの位置は一定。
どっちでしょう?
482デフォルトの名無しさん:2011/11/06(日) 11:19:40.07
def foo
  enter{
   fooに入った直後に実行
  }
  exit{
   fooから抜ける直前に実行
  }

  メインのコード
end
みたいに書く技って無いですか
483デフォルトの名無しさん:2011/11/06(日) 11:47:11.58
>>482

def foo_setup; end
def foo_main; end
def foo_teardown; end

def foo
foo_setup
foo_main
foo_teardown
end

main で例外が起きても実行したい処理があるなら適当に例外キャッチとかしろ
484デフォルトの名無しさん:2011/11/06(日) 11:50:37.68
多勢に問題はないが、微妙に残念なコードだな
いちおう ensure があるにはあるんだけど
485デフォルトの名無しさん:2011/11/06(日) 11:55:35.04
漢字をローマ字に変換したいのですがkakasiを使う以外にライブラリはありませんか?
486デフォルトの名無しさん:2011/11/06(日) 12:16:58.30
kakasiがあるから誰も作らない状態
膨大なデータつくるのめんどくさいし…
487デフォルトの名無しさん:2011/11/06(日) 13:01:25.76
やっぱりそういうものなんですね
chesen,kakasi,mecabどれがいいのか悩みます
kakasiは辞書ファイルが薄い
mecabはchesenの改良版
chesenは除外してkakasiとmecabを選ぶならmecabだろうけど
インストールサイズが小さいkakasi
488デフォルトの名無しさん:2011/11/06(日) 14:05:51.51
>>482

def foo
 begin
  fooに入った直後に実行
  yield
 ensure
  fooに入った直後に実行
 end
end

foo do
 メインのコード
end
489デフォルトの名無しさん:2011/11/06(日) 14:49:15.39
勝手に>>488を改善

def foo
 __daemon__ do
  メインのコード
 end
end


def __daemon__
 # >>488と同じなので省略
end
private :__daemon__
490デフォルトの名無しさん:2011/11/06(日) 15:58:37.22
redmineって1.9.2じゃ動かないのですか?
491デフォルトの名無しさん:2011/11/06(日) 17:26:22.85
>>490

Ruby 1.9 is not supported yet. You have to use Ruby 1.8.x as stated above.
http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Compatibility-notes

ChiliProject (Redmineのfork) も部分的にしか対応終わってないらしいから先は長そうだな。

周囲ではgithub issuesとかpivotal trackerとかいう声が勢いを増しておる。
492デフォルトの名無しさん:2011/11/06(日) 17:56:23.06
>>488
間違えた

def foo
 begin
  fooに入った直後に実行
  yield
 ensure
  fooから抜ける直前に実行
 end
end

foo do
 メインのコード
end
493デフォルトの名無しさん:2011/11/06(日) 19:45:46.55
>>491
ありがとうございます
プロジェクト管理はredmineっていうぐらい聞くのでredmineが使えないのはきついですね
ご紹介してくださった2つも検討してみます
494デフォルトの名無しさん:2011/11/06(日) 19:58:07.32
>>492
def foo
 fooに入った直後に実行
 yield
ensure
 fooから抜ける直前に実行
end
でいい。begin-endは不要
495490:2011/11/06(日) 19:59:58.95
すみませんredmineをphpに移植したものを見つけたのですが
本家redmine比べて足りない機能とかありますか?
ttp://my.candycane.jp/
サンドボックスはこれですttp://my.candycane.jp/projects/show/hoge
496デフォルトの名無しさん:2011/11/06(日) 20:29:22.55
ruby1.9と相性の良いLinux ディストリビューションてありますか?
お勧めを教えてください。

497デフォルトの名無しさん:2011/11/06(日) 20:47:19.66
特にはない
GCCコンパイラがきちんと利用できるのなら自力コンパイルには問題はない
パッケージとして安楽に利用可能なディストリビューションというのは現時点では存在しない
ぜんぶ自力でコンパイルとパッケージ非依存でインストールするのが早道
498デフォルトの名無しさん:2011/11/06(日) 21:23:14.90
きちんとパッケージングされ続けているディストリビューションってないよね
まだ文句言いながらrvm使うしかないのか
499デフォルトの名無しさん:2011/11/07(月) 07:28:19.56
>>496
今あなたが使っているディストリかな
Linuxならだいたい問題ないかと
最悪ソース落としてコンパイルすりゃいいし

…今使ってるディストリなんてねーよ!ってんなら
Linux板で聞いてくればいいんじゃね
500デフォルトの名無しさん:2011/11/07(月) 07:31:03.93
Rubyと言ったらDebian一択だろ
501デフォルトの名無しさん:2011/11/07(月) 07:44:47.66
>>500
君がなにも使ってないのはよくわかった
502デフォルトの名無しさん:2011/11/07(月) 08:11:15.22
たいへん残念なことに
  ・ Ruby本体が動作確認に使用している

  ・ ディストリビューションがRubyをサポートしパッケージが最新に追従している
  ・ 標準追加ライブラリシステムのRubygemsが適切に使用・更新される
  ・ Rubygemsのライブラリのインストールと管理が平易
  ・ 外部ライブラリ(に必要なファイル)の導入や自力コンパイルや更新が容易
の間には関連性がない

ぶっちゃけいちばん簡単なのはWindowsのActiveScriptRubyだぞw
503デフォルトの名無しさん:2011/11/07(月) 08:17:34.21
WindowsはWindowsで色々と問題に遭遇するが
現状でWindowsしか無いというならASRいいよね
個人的にはRuby-mswin32のzipのやつを使ってるが、PATHの通し方知らん人間には流石にすすめないし
504デフォルトの名無しさん:2011/11/07(月) 08:35:59.12
Linuxとして使いやすいの選ぶというのが無難だと思う
むしろLinuxでなければいけないのかというところから

っていうか、普段からLinux使ってないのならやめとけとしか
505デフォルトの名無しさん:2011/11/07(月) 08:47:54.99
パッケージの話をしてんねん
506デフォルトの名無しさん:2011/11/07(月) 11:02:15.60
rubyinstallerでインストールしているのですが
zipのをダウンロードして実行フォルダにパスを通すだけでいいですか?
507デフォルトの名無しさん:2011/11/07(月) 11:03:13.99
用途はruby1.9.2を今入れているのですがruby1.8も入れたいので
フォルダ名をrubyにしてフォルダ名を変更するだけでバージョンを切り替えられるようにしたいのです
508デフォルトの名無しさん:2011/11/07(月) 11:04:21.99
むしろPATHの切り替えで実現すべきじゃないのかなそれは
509デフォルトの名無しさん:2011/11/07(月) 11:14:01.72
うむ、フォルダ名の変更で対処するのはちと厳しい
ruby1.8用のパスを読み込むバッチファイルとruby1.9用のパスを読み込むバッチファイルを併用するのがよさげ
510デフォルトの名無しさん:2011/11/07(月) 11:16:45.14
インストーラ付きのを2つ入れると環境変数や関連付けやコンテキストメニューの取り合いになるから
移行期間中は一方をzip展開する奴にして
↓とかやって呼び出すのがいいんじゃね

call setrubyenv19.bat
ruby -x "%~f0"
goto :eof

#!ruby
puts "hello ruby 1.9.x"
511デフォルトの名無しさん:2011/11/07(月) 11:50:23.24
pik使うんじゃだめなんか?
昔はjunction.exeで切替えたりしてたな
512デフォルトの名無しさん:2011/11/07(月) 11:59:30.91
>>481
> そこでいう「カレントディレクトリ」って、プロセスの?
> それとも「require 'hoge'」が書かれてあるファイルが置かれているディレクトリのこと?

後者。

468の説明はおかしいと思う。
require_relative "hoge" は、require File.expand_path("hoge", Flie.dirname(__FILE__))
と実質等価、のはず。
513509と510:2011/11/07(月) 13:58:33.84
514デフォルトの名無しさん:2011/11/07(月) 18:40:03.66
rubyのバージョン複数扱うならrvmじゃね
rvm default # システムのデフォルトに(たぶん1.8.7)
rvm 1.9.2 # 1.9.2に
って感じで簡単に切り替えられるぞ
515デフォルトの名無しさん:2011/11/07(月) 19:04:08.82
>>514
だからWindowsだっつってんだろ
516デフォルトの名無しさん:2011/11/07(月) 19:22:08.14
>>512
さんくす。
ということは、require_relative()は何に対してrelativeかというと、
require_relativeを呼び出しているファイルを起点にしてrelativeである、
ということですね。

たとえば、今までなら
require(File.dirname(File.dirname(File.dirname(__FILE__))) + "/test_helper")
とか書いていたのが
require_relative("../../test_helper")
と書けるようになるわけか。
これは便利だなあ。
517デフォルトの名無しさん:2011/11/08(火) 00:24:08.51
c/:www/cgi以下にtest.rbとかindex.rbというCGIファイルがあります
これをrubyで簡易サーバとして動かす機能ってありませんか?
localhost:8888/test.rbにアクセスできて表示できると楽なんです
518デフォルトの名無しさん:2011/11/08(火) 00:34:34.85
webrick cgi なんかでぐぐってみて
519デフォルトの名無しさん:2011/11/08(火) 00:34:35.70
WEBrick
520デフォルトの名無しさん:2011/11/08(火) 01:15:19.67
すいません。うまいぐあいにxmlをちゃんと整形した形で出力するためには
どうすればいいのでしょうか?
<?xml version='1.0' encoding='UTF-8'?>
<A>
<C>2</C>
<U>2011/11/08 01:09:02</U>
<H>
<V>192.168.1.2</V>
<V>192.168.1.2</V></H>
</A>

要素Hに子要素Vを入れて出力した結果が上です。ちゃんとVを整形した形
でだしたいのですが、うまくいきません。どのようにすればいいのでしょうか・
521デフォルトの名無しさん:2011/11/08(火) 01:30:14.69
馬鹿には無理
522デフォルトの名無しさん:2011/11/08(火) 01:34:57.64
>>521
どーせ、わかんないでしょ
タグでインデントするプログラムなら組めるけど、
そんなプログラムで読み込んで整形なんてやらないと思うから聞いてるだがね。。
523デフォルトの名無しさん:2011/11/08(火) 01:36:36.28
馬鹿でも無理さんrubyスレでも湧くんだ…
524デフォルトの名無しさん:2011/11/08(火) 01:45:03.05
Ruby には無理
525デフォルトの名無しさん:2011/11/08(火) 01:50:45.81
>>523
初めてきたの意味わかんない
>>524
やっぱりそうなの?
さっきあきらめてxmlindentをインストールして
cat in.xml | xmlindent -i 4 > out.xml
で強引にやったんだけど、うーん
非効率だね。出力の段階でどうにかしたい。
とりあえず、ありがとう。
526デフォルトの名無しさん:2011/11/08(火) 02:04:14.80
他にもあるか知らんけど、nokogiri使うんじゃダメなん?
527デフォルトの名無しさん:2011/11/08(火) 02:07:22.80
>>526
明日ためしてみます。

ちなみに
REXML::Formatters::Prettyでできた^^
528デフォルトの名無しさん:2011/11/08(火) 19:01:11.41
すみませんどのスレで聞いていのかわからないのですが
http://example.com/#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
の#aaaaaaaaaaaaaaaaaaaaaaaaのハッシュ部分はクライアントからサーバに転送されるのでしょうか?
529デフォルトの名無しさん:2011/11/08(火) 22:38:04.92
自分で試せば判ることを何故ここで聞く
530デフォルトの名無しさん:2011/11/08(火) 22:49:50.57
今からrubyに手を出そうかと思っているものですが、
たのしいrubyの2版は現行のrubyを学ぶのには不足、時代遅れなところがあったりするでしょうか
531デフォルトの名無しさん:2011/11/08(火) 22:55:42.42
うるせえ黙って本開いて読み終わってから質問しろや
532デフォルトの名無しさん:2011/11/08(火) 23:44:45.50
Rubyで作られたWebサイトってCGIとして動かしているのでしょうか?
533デフォルトの名無しさん:2011/11/09(水) 01:22:36.57
メソッドからの戻り値はreturnを書くのかと思ってたけど、
rubyでは通常はreturnを省略する、ってマッツの本に書いてあった
けどマジ?

534デフォルトの名無しさん:2011/11/09(水) 01:30:09.97
>>533
処理途中で戻る時以外はreturn書かないことが多いな。
LISPの影響かも。
535デフォルトの名無しさん:2011/11/09(水) 01:47:22.22
>>532
そこでCGIが真っ先に出てくるのなら、あなたが書いてレンタルサーバ上で動かすようなスクリプトはおそらくCGIのはず
536デフォルトの名無しさん:2011/11/09(水) 02:26:05.56
>>533
別に書いてもいいけど、決して速い処理じゃないから、
あらゆる自作メソッドに全部律儀にreturnつけてたら全体的に遅くなるよ
「メソッドの最後の処理の値が戻り値(返り値)として自動で返る」で充分な場合は、returnは書かないほうが好ましい

ただ、稀になにがなんでも書かない(returnを書かなくても動作する不自然な構造で作ろうとする)人がいるんだけど、
returnを書いたほうが明快なジャンプ構造になる場合はちゃんと書いて欲しい
遅いったって、そんな目に見えて遅くなるわけじゃない
537デフォルトの名無しさん:2011/11/09(水) 03:02:06.32
なんで遅くなるの
538デフォルトの名無しさん:2011/11/09(水) 03:26:39.83
1.9だと同じになるっぽい
539デフォルトの名無しさん:2011/11/09(水) 03:41:50.41
>決して速い処理じゃないから

えー
540デフォルトの名無しさん:2011/11/09(水) 04:08:35.30
実行しようとしているコンソールがサポートしている文字コードを調べる方法ってないかな
DOS窓だと基本UTF-8は文字化けするけど、netbeansはutf-8の方が都合が良いし
その他のコンソールの場合も考えて対応している文字コードに合わせて出力する文字コード切り替えたいんだけど
どうやったらいいんだ?
541デフォルトの名無しさん:2011/11/09(水) 05:07:35.10
chcp 65001
542デフォルトの名無しさん:2011/11/09(水) 05:12:57.94
それはUTF8に切り替えられるけど、フォントはスクリプトから変更できないから配布の際に困るだろ
543デフォルトの名無しさん:2011/11/09(水) 05:15:39.11
chcpって、実際には全然使えないよね
1.9.3からはwindowsでもutf-8のまま出力して大丈夫なようになってる
544uy:2011/11/09(水) 06:41:47.72
1.93Sugeeeって一瞬思ったけど出来るんなら最初からやれとも同時に思った
545デフォルトの名無しさん:2011/11/09(水) 07:20:17.39
ルビー初心者です、質問させて下さい。
ダブルクォーテションで囲ってるにも関わらずバックスラッシュnとかtが改行やタブにならずそのまま表示されてしまいます
何が原因でしょうか?
バージョンは1.8.7です。よろしくお願いします
546デフォルトの名無しさん:2011/11/09(水) 07:37:15.98
>>545
p "hoge\nfuga" とかしてるとそうなる
p はデバッグ用なのでprintやputsを使う

次からソースも貼ってね
547デフォルトの名無しさん:2011/11/09(水) 07:42:43.09
>>543
>>541みたいな人は実際にはWindows持ってないことが多い
548デフォルトの名無しさん:2011/11/09(水) 07:49:15.00
>>546
ありがとうございます
ちょっと今手元にPCないので後で試してダメならソース貼ってみます
549デフォルトの名無しさん:2011/11/09(水) 08:08:19.21
お前らがどんなにピーピーギャーギャー言ったって
強がろうが俺をバカにしようが

このゴミRubyが大失敗超不人気のPerl以下の汚物

だって事実は変わらないの
わかった?負けず嫌いの小学生みたいな負け惜しみ見てると滑稽だよwwww
可哀想になってくるわほんとに
まあお前らも最初は被害者だったんだよな、妄想と大風呂敷に踊らされてよ
でもな、もっと早くに気づいたたゆらはいっぱいいるだろ?
いまでもこんな酔っ払いが吐き戻したゲロみたいな言語を一生懸命庇ってさ
本当の事を指摘している俺がおかしいみたいな感覚になってるんだぞお前ら?www
粋がっちゃったけど結果大失敗でものすごい負け犬感味わってるんだろうから気持ちは解るけどよ
いいかげん現実見つめろや?wwwwな?wwww

実際、今どうなのか言ってみろよ?wwwおい?wwwwww
このゲロみたいなくっせえゴミRubyは使われてるの?
流行ってるの?ヒットしてるの?日本だけだろwww
発表時みたいな状況になってんのかよ?wwwwwwwww
俺Rubyやってるんだぜ!って人前で言えんのお前ら?wwwwああん?wwwwwwwww
ゴミ言語すぎてそんなの人前で言えるわけないよなwww
550デフォルトの名無しさん:2011/11/09(水) 08:11:40.58
大失敗超不人気のPerlとか朝釣りにしてもひどすぎる
551デフォルトの名無しさん:2011/11/09(水) 08:15:18.69
>>548
前からずっと思ってたんだけど、それ意味ないよね
こちらが知りたいのは試してどうだったかであって、あなたがレスをいつ読んだかどうかじゃないよね
552デフォルトの名無しさん:2011/11/09(水) 08:24:04.32
「とりいそぎお礼まで」厨はパソ通やfjやMLの太古から延々槍玉に挙げられてるな
553デフォルトの名無しさん:2011/11/09(水) 08:30:14.35
興味のレイヤーが根本的に違うんだよな
こればっかりは仕方ないわ
554デフォルトの名無しさん:2011/11/09(水) 08:38:46.04
スレタイに沿った書き込みが多いのは当たり前なんで、「こうした方がいいぜ」と言い続けてりゃ良いんじゃないの?
555デフォルトの名無しさん:2011/11/09(水) 10:31:28.26
もっと大きな心をもてや
556デフォルトの名無しさん:2011/11/09(水) 13:58:55.93
Rubyの話を、
しよう
557デフォルトの名無しさん:2011/11/09(水) 14:21:03.63
どうぞ
558デフォルトの名無しさん:2011/11/09(水) 15:40:34.58
>>546
ダメでした

ソースは
#/usr/bin/ruby
print("b\n")
だけです。文字コードの問題でしょうか?
559デフォルトの名無しさん:2011/11/09(水) 15:43:58.64
rubyで画像を表示させる方法ってございませんか?
560デフォルトの名無しさん:2011/11/09(水) 15:44:31.86
rubyを、はじめたいと思う
環境 emachines E729Z
window7

環境を作ろうと、http://www.kkaneko.com/rinkou/ruby/rubyinstaller.htmlを、見つけた

で、ダウンロードした。
で、インストールした。

そしたら、どうしたらいいでしょうか?
561デフォルトの名無しさん:2011/11/09(水) 15:49:39.03
558です、自己解決しました。
ターミナルとエディタを別画面で操作したかったのでX11でEmacsを起動、編集してたのですが、ここでバックスラッシュを押しても\になるのがダメだったみたいです。試しにターミナル中ででEmacsを起動してみるとバックスラッシュが\になりうまく行きました。
原因がわからず気持ち悪いのですが、ありがとうございました
562560:2011/11/09(水) 16:16:27.76
rubyで、helloworldをできません

http://rubyinstaller.org/から、Ruby 1.9.3-p0をダウンロードして、インストールしました。
コマンドプロンプトで、ruby -vをしたら、ruby 1.9.3p0 (2011-10-30) [i386-mingw32]と、でます。
から、インストールを、できたと思います。

次に、helloworld.rbファイルを作って、
ruby helloworld.rbをしましたが、
ruby: No such file or directory -- helloworld.rd (LoadError)に、なります。

どうしたらよいでしょうか?
563560:2011/11/09(水) 16:29:33.83
自己解決しました。
拡張子の表示を、表示しない設定のため、ファイルの最後に.txtが入っていました。
失礼しました。
564デフォルトの名無しさん:2011/11/09(水) 16:29:41.64
>>561
emacs-gtkはなにも設定しない場合、「へ」の隣あたりの、日本語キーボードで円記号が印字されてるキーを押すと \ を入力する
これはもろちんバックスラッシュではなく、YEN SIGN だ
基本的には「ろ」の \ を使え
565デフォルトの名無しさん:2011/11/09(水) 16:32:48.74
いやん化けた
キーボード右上あたりの円記号印字キーを押すと ¥ になるので「ろ」を使うかEmacsの設定しとけ
566デフォルトの名無しさん:2011/11/09(水) 16:33:33.44
WEBRickで相手サーバにProxyConnectionを送らないようにしたいんだけどどこを変えればいいですか?
567デフォルトの名無しさん:2011/11/09(水) 16:38:27.49
今Ruby1.9.2をWindowsで勉強しています
1.9.3がでたようなんですが1.9.2と1.9.3って違いありますか?
アップグレードして1.9.3で書くのに慣れるべきでしょうか?
568デフォルトの名無しさん:2011/11/09(水) 16:40:46.69
>>567
初心者スレ的な違いはないと思ってくれていい
1.9.3-p0のpが増えたリリースが出たら1.9.2から移行する予定
569デフォルトの名無しさん:2011/11/09(水) 16:42:38.68
>>568
了解しました
570デフォルトの名無しさん:2011/11/09(水) 17:14:04.51
パッチレベル0の避けられ率は異常
1.8.6-p0のトラウマかなんかか
571デフォルトの名無しさん:2011/11/09(水) 17:30:37.31
今日から始めるのでRuby1.9.3poをRubyInstallerからダウンロードしてインストールしましたがやめたほうがいいのですか?
572デフォルトの名無しさん:2011/11/09(水) 17:55:23.97
初学者が簡単にバグにぶち当たれるほどテストしていないわけじゃないから
そんなに心配することはない
573デフォルトの名無しさん:2011/11/09(水) 18:04:12.12
JSONの整形ライブラリってありませんか?
574デフォルトの名無しさん:2011/11/09(水) 18:09:48.00
>>573

$ gem search json -r
575デフォルトの名無しさん:2011/11/09(水) 21:22:41.01
group_byとかしらなかったわ。こういうのってリファレンス読んで見つけるの?
576デフォルトの名無しさん:2011/11/09(水) 21:35:15.90
>>573
整形って、うまいことインデントしてくれるモノ?
577デフォルトの名無しさん:2011/11/09(水) 22:36:37.84
そうです
578デフォルトの名無しさん:2011/11/09(水) 22:44:43.04
JSONなんてパーズが済めばHashとArrayなんだから、
インデント付きの文字列表現が欲しいだけなら
標準添付ライブラリのpp(pretty print)を使えばいいのでは?
579デフォルトの名無しさん:2011/11/09(水) 22:48:24.25
Windowsの1.9.3p0は
テキストモードのIO書き込みがLF改行になっちゃうので
もうちょっと待ったほうがいいかもね

あと、-dオプションつけると
Exception `LoadError' at 省略/lib/ruby/1.9.1/rubygems.rb:1243 - cannot load such file -- rubygems/defaults/operating_system
Exception `LoadError' at 省略/lib/ruby/1.9.1/rubygems.rb:1252 - cannot load such file -- rubygems/defaults/ruby
ってでるのがうざい
実害は無いけどバグなのかな?
580デフォルトの名無しさん:2011/11/09(水) 22:54:19.01
俺も今日、each_with_objectというのがinjectでハッシュ作るより便利なことに気づいた
581デフォルトの名無しさん:2011/11/09(水) 23:30:24.10
>>514
cygwin入れましょうぜ
582デフォルトの名無しさん:2011/11/10(木) 10:48:28.13
やっぱ初心者は.1.9.2からはいったほうがいいんですか?
puts "こんにちは"で表示されなくなったりするバグとか出ても対処できない
583デフォルトの名無しさん:2011/11/10(木) 13:15:17.92
Ruby-1.9.2-p290 Microsoft Installer Package(2011-08-25)

nokogiri使えるの?1.5.0でエラーが出るんだけど
584デフォルトの名無しさん:2011/11/10(木) 18:30:10.55
>>578
ありがとうございます
ppというのをマニュアルで読んでみましたがマニュアルの見かたが分らずどのように使えばよいのか分かりません

http://www.ruby-lang.org/ja/old-man/html/prettyprint.html

整形前
{"a":"aaaaaaaa","b":"bbbbbbbbb"}
整形後
{
"a": "aaaaaaaa",
"b": "bbbbbbbbb"
}
みたいに読みやすくできればいいのです
585デフォルトの名無しさん:2011/11/10(木) 19:07:55.15
>>584
astyleは?
586デフォルトの名無しさん:2011/11/10(木) 19:26:40.12
>>584
require 'json'
data = JSON.parse('{"a":"aaaaaaaa","b":"bbbbbbbbb"}')
print JSON.pretty_generate(data)

587デフォルトの名無しさん:2011/11/10(木) 20:07:47.33
>>585
ruby astyleでぐぐってみたのですがrubyに関する情報が見当たりませんでした
わたしの検索の仕方がまずいのかもしれません

>>586
これで思う結果になりました
>>584で書いたマニュアルURLにparseとpretty_generateっていうのが載ってなかったのでやっぱRubyはマニュアル難しいです
588デフォルトの名無しさん:2011/11/10(木) 20:37:06.69
>>584

JSON表現はただのStringになってしまう。
それをまた構造をパースしつつインデントを付けて回るより、

pp(to_jsonを呼ぶ前のオブジェクト)

でいいんじゃないの? という話。
589デフォルトの名無しさん:2011/11/10(木) 21:04:43.05
{"a":"aaaaaaaa","b":"bbbbbbbbb"}をRubyのハッシュリテラルと勘違いしてないか
590583:2011/11/10(木) 22:10:26.01
自己解決。RubyInstallerにしたらNokogiri動いた。
591デフォルトの名無しさん:2011/11/11(金) 00:29:46.95
だれかrubyのrpm

を作るspecファイル頂戴
592デフォルトの名無しさん:2011/11/11(金) 06:29:17.30
まだredhat系は1.9をパッケージにしてないのか
どうしようと思ってるんだろ?
593デフォルトの名無しさん:2011/11/11(金) 08:37:02.63
1.8を捨てるのが無理なんだろ
下位互換を考えないからこんなことになったのだ
594デフォルトの名無しさん:2011/11/11(金) 08:41:10.59
1.8.x=XP
1.9.x=Vista
595デフォルトの名無しさん:2011/11/11(金) 23:25:12.65
そもそもRubyは下位互換なんて考えないような言語だったのに、
あまやかすからバカが湧いてくる。
596デフォルトの名無しさん:2011/11/12(土) 02:39:08.71
遊び以外で使ってるとupdateするたびにいろんなgemの下位互換がなくなってて
書き直さないといけなくてクソだるいだろ
railsで実用的になったのがダメだったのか
597デフォルトの名無しさん:2011/11/12(土) 10:09:17.94
何でRubyのBOTって迷惑なことするんです?
@rubyist_bot←迷惑メール級にいらない
598デフォルトの名無しさん:2011/11/12(土) 11:14:33.41
>>597
report for spamしたらRTされなくなるよ
599583:2011/11/12(土) 13:51:19.15
ウィンドウズでユニコードファイルって扱えますか?
Dir.openで開いて読み込むとその時点でファイル名がwindows-31jになってるんですが
ruby1.9.2です
600デフォルトの名無しさん:2011/11/12(土) 13:51:53.71
ナンバー取り忘れてた。すまそ
601デフォルトの名無しさん:2011/11/12(土) 15:41:23.15
>>597
一瞬Ruby製のbotかと思った
Rubyに限らずRTとかリプライとかしてくるbotはいっぱいある

ああいうの、RTするならするで@つけない非公式RTにしてくれたらいいのに
602デフォルトの名無しさん:2011/11/12(土) 18:12:59.97
Open-uriを利用してJavascriptが有効でないと表示できないページを取得するのは不可能ですか?
見せかけだけでもいいのですが

新Twitter(http://twitter.com/#!/***)を、open-uriで取得しようとすると
Javascriptが有効である必要がある
と表示されてユーザー情報が表示されません

もし、Open-uriで不可能であれば何を用いれば利用できますか?

603デフォルトの名無しさん:2011/11/12(土) 18:38:34.99
>>599
openするときにエンコーディングが指定できるようになってる
open('hogehoge','r:UTF-8')

あとで変更することも出来る
f = open('hogehoge','r')
f.set_encoding('UTF-8')

いきなりファイルから読み込むIO.readなんかだとハッシュオプションで指定する
IO.read('hogehoge',encoding:'UTF-8')

Ruby リファレンスマニュアル
http://doc.ruby-lang.org/ja/1.9.2/class/IO.html
604デフォルトの名無しさん:2011/11/12(土) 18:55:08.50
>>599
Dirは、内部ではユニコードで取得してるんだけど、その後filesystemのエンコーディングに変換して返しちゃってるみたいだな。
文句言えば修正してもらえる可能性もあるが、当分無理だろうな
605デフォルトの名無しさん:2011/11/12(土) 19:54:40.27
中身がrb_encdb_alias("filesystem", "UTF-8");だけの拡張作ったらUTF-8で返ってきた
606デフォルトの名無しさん:2011/11/12(土) 20:35:22.51
Dir.openはエンコーディング指定できるみたい(マニュアルに無いけど)
Dir.open('/', encoding:'UTF-8')

でも、Dir.glob は問答無用でWindows-31Jに変換されちゃうな
607デフォルトの名無しさん:2011/11/12(土) 20:44:31.60
Dir.glob("*.*".encode("UTF-8"))
608デフォルトの名無しさん:2011/11/12(土) 20:46:30.41
もう実装されてたんかい
609599:2011/11/12(土) 21:27:40.61
>>603
詳しい回答ありがとうございます。IOに「ファイル名のエンコーディング」の項目がありました。
読んでいませんでした。すみません。IO.readでエンコードを指定するのにはハッシュを使うのは初めて知りました。
>>606
試してみたらうまくいきました。ありがとうございます。リファレンスには書いてないんですよね。

ハッシュでのオプションの指定というのが今までよく知らなかったので勉強になりました。
ありがとうございました。
610デフォルトの名無しさん:2011/11/12(土) 21:49:32.70
>>602
そのためにTwitterでAPIが用意されてるでしょ
611デフォルトの名無しさん:2011/11/12(土) 22:22:17.31
>>607
なるほど
引数のエンコーディングと同じエンコーディングで返ってくるのか
612デフォルトの名無しさん:2011/11/13(日) 08:10:53.22
>>602
たしかtwitterのスクレイピングは規約違反
API使え
ってか、gem twitter を使えばいいのでは
613デフォルトの名無しさん:2011/11/13(日) 13:15:36.68
ドキュメントのHash.new { |hash, key| ... }の説明で「ブロックの評価結果がデフォルト値になります」って
書かれているのに、サンプルコードは
  h = Hash.new {|hash, key| hash[key] = "foo"}
となっていて気持ち悪いです。
  h = Hash.new {|hash, key| "foo"}
ではダメな理由があるのでしょうか?
614デフォルトの名無しさん:2011/11/13(日) 13:20:40.11
ハッシュはサーバに送信されないんだから大人しくAPIを覚える作業に入ってればいいよね
615デフォルトの名無しさん:2011/11/13(日) 13:30:53.03
RubyにはJavaと同じようなpublicとprivateとprotectedというものはクラスにはないのですが?
616デフォルトの名無しさん:2011/11/13(日) 13:49:27.48
public, protectedはあるね
privateは随分意味が違うな
617デフォルトの名無しさん:2011/11/13(日) 14:00:24.33
その部分はやっぱりRubyにある思想というものが影響しているからでしょうか?
618デフォルトの名無しさん:2011/11/13(日) 16:19:08.63
適当に実装しただけなので、気にするな
619デフォルトの名無しさん:2011/11/13(日) 17:25:02.80
>>613
たぶん
h = Hash.new{|hash,key| "foo"}
p h['bar'] # "foo"が返ってくる
p h # だがハッシュはそのまま
p h['bar'] # 何度でもデフォルトブロックが呼ばれる

h = Hash.new{|hash,key| hash[key]="foo"}
p h['bar'] # "foo"が返ってくる
p h # ハッシュも更新されている
p h['bar'] # 二回目以降はデフォルトブロックが呼ばれることはない
620デフォルトの名無しさん:2011/11/13(日) 17:43:15.93
>>619 なるほど!すっきりしましたありがとうございます
621デフォルトの名無しさん:2011/11/13(日) 18:02:13.37
俺がRubyを学ぶ理由
・国産の言語だから
・PythonスレよりRubyスレの住民のほうが親切に回答してくれる人が多いから
・PHPしかできないとバカにされるから
622デフォルトの名無しさん:2011/11/13(日) 18:04:28.12
>>615
同じような動作をするものはない
名前は同じだが動作は全く違う
言語構造が違うからそもそも同じ動作になるはずないじゃん、というのが一応の答

実際にいちばん近いのは>>618
「JavaやC++にあるやつをRubyで作ってみようシリーズ」の負の遺産は他にも attr_accessor とかがある
623デフォルトの名無しさん:2011/11/13(日) 23:48:08.97
メタプログラミングRuby読みながら
Class.newではクラス名を指定するときに
ClassName=Class.new do
# 初期化コード
end

とかしないといけないとあるけど
第1引数にシンボルか文字列が来たら、クラス名にする
foo = Class.new :Foo
とか実装予定無いかな…
624デフォルトの名無しさん:2011/11/14(月) 06:00:27.58
現状だとこう?

foo = Foo = Class.new

これ↓は分かりにくいかな。

foo = class Foo; self end
625デフォルトの名無しさん:2011/11/14(月) 06:43:03.34
rubyのソースコードってperlみたいで汚いよね
626デフォルトの名無しさん:2011/11/14(月) 08:39:42.21
>>623
:Fooを動的に変更したいならこんなんで
klass = Class.new do ... end
Object.const_set(:Foo,klass) # klassの所にClass.newを埋め込んでも可
627デフォルトの名無しさん:2011/11/14(月) 09:22:25.03
何故Rubyを学ぼうと思ったのですか?
Perl,Python,PHPを置いてRubyを選んだのは何故ですか?
628デフォルトの名無しさん:2011/11/14(月) 10:49:56.51
CGIで日本語を表示させようとすると500エラーになって動きません
日本語の部分を英語にすると動きます
ファイルはUTF-8 BOMなしです
どうやって日本語を書いても500エラーが出ないようにできますか?

#!C:\\Ruby193\bin\ruby.exe
print "Content-type: text/html\n\n";
print "あ"
629デフォルトの名無しさん:2011/11/14(月) 11:23:51.16
>>627
何故Rubyを学ぼうと思わないのですか?
Perl,Python,PHPを置いてRubyを選ばないのは何故ですか?
630627:2011/11/14(月) 11:24:54.99
理由は分からないため質問してます
631デフォルトの名無しさん:2011/11/14(月) 11:24:57.64
>>628
-Ku
632デフォルトの名無しさん:2011/11/14(月) 11:32:20.08
>>627
俺はPythonやPerlよりも先に学んだからかな
そのお陰でメソッドチェーンしにくいのはどうも使いにくい

PHPはそもそも用途が違うじゃん
633デフォルトの名無しさん:2011/11/14(月) 11:38:10.45
>>627
PerlはCPANがあるから使っていたけど言語には不満があった
Rubyは言語的にはPerlよりもずっといいし
gemも充実したからRubyを使うようになった
PHPはテンプレートエンジンだし論外
634デフォルトの名無しさん:2011/11/14(月) 11:43:12.03
>>631
#!D:\Programs\Ruby193\bin\ruby.exe -Ku
って書いたら日本語で表示できました!
これっておまじないとして書いておかないとだめみたいなルールなんでしょうかね
これからは-Kuを書くようにします
635デフォルトの名無しさん:2011/11/14(月) 11:49:46.79
# coding: utf-8
入れてないだけだったりして
636デフォルトの名無しさん:2011/11/14(月) 11:53:22.96
>>635
コマンドラインで練習してたときは書いてましたがCGIのときはHTMLでmetaのcharsetで文字コード指定するから書かなくていいと思ってました
637デフォルトの名無しさん:2011/11/14(月) 11:59:07.30
「書かなくていい」ってどこに書いてあった?
638デフォルトの名無しさん:2011/11/14(月) 12:04:48.26
>>636
別にshebang(#!なんちゃらかんちゃら)書いても2行目に書けるから書いとけ
HTMLのmetaで指定しようがRubyには関係ない

1.9のマジックコメントは必須
-K オプションはあくまで1.8からの以降用だからマジックコメント使っとけな
639デフォルトの名無しさん:2011/11/14(月) 12:42:19.33
いや、1.9でもKでおk
640デフォルトの名無しさん:2011/11/14(月) 12:57:37.28
マジックコメントの -*- って書かなくてもいいんですか?
Emacsのためにあるとか聞いたような気がするんですが
641デフォルトの名無しさん:2011/11/14(月) 13:06:11.46
>>637
すいませんブラウザで表示したときにファイルをUTF-8にしてmetaで文字コードを指定しておけば大丈夫だと思ってました
>>638
これからは2行目に書くようにします
念のため- Kuも書いておいたほうが完璧ですよね
642628:2011/11/14(月) 13:08:17.71
最後に質問なんですが
http://jp.rubyist.net/magazine/?0023-Cgirb
を見るとRubyはCGIに向いてないとかかれてました
まつもと先生はcgi.rb に代わるライブラリを公募するって行ってましたが
これは2008年の記事なんですが1.9.3ではもう解決されている話題でしょうか?
643デフォルトの名無しさん:2011/11/14(月) 13:13:17.74
今の1.9ならCGIAltに置き換わってる
644デフォルトの名無しさん:2011/11/14(月) 13:29:11.92
>>641
「ファイルをUTF-8にしてmetaで文字コードを指定しておけば大丈夫」だとどこに書いてあった?
645デフォルトの名無しさん:2011/11/14(月) 13:30:14.39
>>642
RubyはCGIに向いてないしGUIにも向いてない
646デフォルトの名無しさん:2011/11/14(月) 15:11:19.03
まじすか
TwitterってRubyでかかれてたらしいのでCGIを使ってると思うんですが
Twitterぐらいのアクセス量でも問題なくアクセスできるのでRubyでCGIやりたいと思った次第です
647デフォルトの名無しさん:2011/11/14(月) 15:27:43.21
TwitterはもうRuby使ってないよ
648デフォルトの名無しさん:2011/11/14(月) 15:40:52.17
>>646
CGIに向いてないのはライブラリがうーんって感じなのが大きい
649デフォルトの名無しさん:2011/11/14(月) 15:49:08.69
このスレで、○○は向いてないって言うやつは、ただ知識がないだけなので無視していい
650デフォルトの名無しさん:2011/11/14(月) 15:58:07.75
驚き最小の法則()
651デフォルトの名無しさん:2011/11/14(月) 16:07:55.25
>>646
TwitterはRubyを使ってたけど遅いCGIは使ってないはず
CGI(とCGIの代替になるもの)について調べたほうがいいよ
652デフォルトの名無しさん:2011/11/14(月) 17:53:05.05
なんですかそれは
mod perlみたいなものがRubyにもあるのですか?
おしえてください
653デフォルトの名無しさん:2011/11/14(月) 22:02:28.05
>>652
RubyでウェブといえばRuby on Railsだろ
httpdとアプリがくっついてる
654デフォルトの名無しさん:2011/11/14(月) 22:07:32.39
webrickのことだよ
655デフォルトの名無しさん:2011/11/14(月) 22:50:23.84
webrickはcgiとして動くものではないのですか?
Ruby on Railsはインストールが分らなくて挫折しました
twitterはnginx+rubyで動いてました
656デフォルトの名無しさん:2011/11/15(火) 14:37:53.20
モジュールにクラスメソッド?を定義するとき、

module Module
class << self
def class_method

とか

module Module
def self.class_method

とか方法があるみたいですが、どっちを使ってますか。
もしくは、使い分けとかあるのでしょうか。
657デフォルトの名無しさん:2011/11/15(火) 14:56:28.09
いくつも定義するときは特異クラスにしてる
658デフォルトの名無しさん:2011/11/15(火) 14:58:10.93
どれでもよい
def を書いて自力でメソッドを定義するぶんにはまったく違いはない

スレ的なおすすめは後者だが、最近の非初心者層には前者の

class C
 class << self
  # ここでインスタンスメソッドの定義の書き方をするとクラス/モジュールオブジェクトに定義される
 end
end

というのが人気
「インスタンスメソッドの定義の書き方」というのがミソで、たとえば

class C
 class << self
  attr_reader :hoge
 end
end

と書くと C.hoge が定義される(参照される変数 @hoge はいわゆるクラスインスタンス変数になる)
メソッドを定義するメソッドとかを使いたい場合は class << self ... endじゃないと逆にめんどくさい
659デフォルトの名無しさん:2011/11/15(火) 15:42:01.99
>>657-658
サンクス。
なるほど特異クラスの方が流行りなんですね。
特異クラスだとインスタンス変数も(メソッドと同じように)
クラスインスタンス変数になるんですね。
660デフォルトの名無しさん:2011/11/15(火) 23:42:27.12

すいません
ある特殊な文字列のみ変換の対象を外し、それ以外は文字変換の対象
にするようなプログラムの例を示してくれると助かります。

例として >のgの文字は変換の対象からはずし、他のgは文字変換の対象とする。もっと具体的に
>>giants is great のような文章中に存在するgを<b>g</b>で囲いたいのですが、普通に全変換していまうと
&<b>g</b>t;となって、実体参照が可笑しくなっていまいます。いいプログラムのやり方が思いつかないのでよろしくお願いします。
661デフォルトの名無しさん:2011/11/15(火) 23:54:58.22
& g t ; の並びに含まれる g を除くというのはこうだろうか。

gsub(/(?<!&)g(?!t;)/, '<b>g</b>')
662デフォルトの名無しさん:2011/11/15(火) 23:58:18.25
初心者的には、
素直に置換してからやり過ぎてしまった置換だけ元に戻すという手がよいかも。

gsub(/g/, '<b>g</b>').gsub(%r[&<b>g</b>t;], '>')
663デフォルトの名無しさん:2011/11/15(火) 23:59:18.94
しまった。最後の実体参照がしっかり置き換えられてしまった。察して。
664デフォルトの名無しさん:2011/11/16(水) 00:02:11.93
その例なら一旦実態参照を戻せばいいんじゃね?

require "cgi"
str = ">giants is great"
p CGI.escapeHTML(CGI.unescapeHTML(str).gsub("g", "<b>g</b>"))
665デフォルトの名無しさん:2011/11/16(水) 00:08:35.02
それはダメだ
666デフォルトの名無しさん:2011/11/16(水) 00:15:10.17
<b> とかのまで置き換えられてしまうね。
667デフォルトの名無しさん:2011/11/16(水) 04:48:43.62
こんなのはどう?

実体参照も置換対象にしてしまう
で、gのみの場合だけ置換して違ったらそのままにする

gsub(/&[A-Za-z]+;|g/){|m| m == 'g' ? '<b>g</b>' : m}
668660:2011/11/16(水) 08:24:52.80

みなさん、ありがとうございます。やはり難しいみたいですね。
実際は変換したい文字はgだけではありません。t gt ; などやすべて文字が
対象です。普通に考えたらきりがありませんので、変換の対象ならないように(実体参照の文字とタグ内の文字)を検索の対象から外したいのです。

イメージとしてはcntC+fで文字検索すると黄色いハイカラーが文字つきまよね?あんな感じでフォームで文字入力して変換した文字をhtmlに吐き出す最終的なものです。
もし、よろしければ、アイデアだけでもいいので良い考えを持っている人がいれば是非宜しくお願いします。ずっと考えても思いつかないんですよね。
669660:2011/11/16(水) 08:29:13.68
×フォームで文字入力して変換した文字をhtmlに吐き出す最終的なものです。
○フォームで任意の文字入力して変換した文字をhtmlに吐き出すのが最終的な目標です。
670デフォルトの名無しさん:2011/11/16(水) 09:00:14.87
何が難しいんだ
671デフォルトの名無しさん:2011/11/16(水) 09:16:26.95
>>670
1行で済ませること
672デフォルトの名無しさん:2011/11/16(水) 09:31:26.90
>>670
自前で読み込み位置の情報を保持すること

非対象文字列が出るまで1文字ずつ読み込み、非対象文字列が出た時点で
(または、非対象文字列正規表現にマッチする文字位置で元文字列を2つに割って)
非対象文字列の直前までの文字列に対して着色 gsub をかけて、
着色結果に非対象文字列を連結して、
非対象文字列が出るまで1文字ずつ読み込み、非対象文字列が出た時点で
(または、非対象文字列正規表現にマッチする文字位置で元文字列を2つに割って)
非対象文字列の直前までの文字列に対して着色 gsub をかけて、
着色結果に非対象文字列を連結して、

というようなことをえんえんやればいいような気がする
673デフォルトの名無しさん:2011/11/16(水) 09:41:23.83
StringScannerでやれば簡単じゃん
674デフォルトの名無しさん:2011/11/16(水) 09:56:53.82
>>671
じゃあ、宜しくお願いします
675デフォルトの名無しさん:2011/11/16(水) 09:57:53.74
>>673
試して見ますね
676片山博文MZ:2011/11/16(水) 10:25:13.44
ふふふ、諸君はわたくしに勝てるかな。。。
677デフォルトの名無しさん:2011/11/16(水) 10:40:17.76
>>670
行き着く先繰り返しですよね

ある任意のhtmlのソースを読み込んで、もちろん実体参照はこわれないようにして、表示の一部分のみ変換する
初心者スレではなかったかもしれません

>>673
scanでは結構むずかしです。一文にマッチするパターン、否定するパターンが混在するからです。そのパターンを網羅すると相当なことになります










678デフォルトの名無しさん:2011/11/16(水) 10:41:47.17
アンカーミス
>>670>>672さんです
679デフォルトの名無しさん:2011/11/16(水) 10:44:53.94
>>677
お前がアホなだけだ
680デフォルトの名無しさん:2011/11/16(水) 11:00:38.74
どういうものを処理しようとしてるのかいまいちわからんが、簡単に処理しちゃだめなんか?

scnr = StringScanner.new("ampm &amp; lawson")
rep = ""
m = "a"
while r = scnr.scan(/(&\w+;|#{Regexp.escape(m)}|[\w\W])/)
 case r
 when m
  rep << "<b>" << r << "</b>"
 else
  rep << r
 end
end
681デフォルトの名無しさん:2011/11/16(水) 11:08:37.93
戻り読みすればいいんじゃねと思ったら戻り読みで繰り返し使えないのな
682デフォルトの名無しさん:2011/11/16(水) 11:57:58.17
>>679
はいはい

>>680
そのコードじゃタグないも処理されます
無理です
683デフォルトの名無しさん:2011/11/16(水) 12:02:57.31
>>677
>ある任意のhtmlのソースを読み込んで、もちろん実体参照はこわれないようにして、表示の一部分のみ変換する

質問の最初に、まずこの一文を書くべきだったね
>>660の内容では、スレ住人が単純な文字列置換だと認識してしまうのは当たり前
トップダウンに最初に最終的な目的(上の一文)を書いてから次に具体的な問題を書く、文書作法を身につけなさい

で、最終目的がこれだとしたら、おそらくHTMLのタグ名や属性、文書型宣言、コメント....etcの
マークアップ要素は無視して、生のユーザテキスト部分だけを置換対象にしたいということなんだろ?
そうであるなら、
 HTMLパーザでHTMLの構文ツリーを作成して、
 そのツリーをルート要素から順に辿りながら、
 テキスト要素についてのみ置換を実行する
という処理が必要になる

HTMLパーザについては、たとえばxmlscanのようなライブラリがあるから、
自分に合うものをRAAやRubyForgeで探して利用しなさい
あるいはRacc等の字句解析/構文解析処理の知識があるなら、自力で書くこともできる
684デフォルトの名無しさん:2011/11/16(水) 12:04:35.76
>>682
じゃあタグ除外するようにすりゃいいじゃん
685デフォルトの名無しさん:2011/11/16(水) 12:05:25.04
一文字ずつ読み込んで処理して<が出たら>が出るまで無視、&が出たら;が出るまで無視じゃだめなん?
686660:2011/11/16(水) 12:25:44.59
>>683
その通りの理解です。であるので相当複雑です。説明不足だと思います。
一応いろいろ調べてみます。htmlパーサーですか。やはりツールを使うのか

イメージとしてはyahooのトップページのソースを右クリックで保存して、フォームから任意の文字列を入れて、その文字のみ装飾する(例えば色つけるなど)プログラムを打ちたかったのです。
687デフォルトの名無しさん:2011/11/16(水) 12:32:57.06
簡単にやるなら680の正規表現にタグの正規表現を追加。
真面目にやるならjavascriptで処理。
688デフォルトの名無しさん:2011/11/16(水) 12:49:54.37
実際にhtmlの処理に必要なのは、どれだけ間違ったhtmlを処理できるかになるから、ブラウザ利用するのが最強
jqueryのハイライトプラグインでも使ったほうが手っ取り早い
689デフォルトの名無しさん:2011/11/16(水) 13:30:36.23
>>686
俺PHPで文単位に切り分けるプログラムを書いたことあるけど、かなり遅かったよ。
ファイルの大きさに対して指数関数的に処理時間が増加する感じだった。
これたぶんメモリーの使い方が悪いんだよね。
PHPが糞だからとか、お前のコーディングが糞だからって言いたいだろうけど、
たぶんRubyでも誰がやっても同じ結果になるんじゃないかな。
俺がやったやりかたは、ブロック要素を切り分ける必要はないってことと、インライン要素は
切り分ける必要があり、且つ切り分けに何も問題がないって考えで、テキスト側から
切り分けた後、タグの優先順位に従って再合成した。
690デフォルトの名無しさん:2011/11/16(水) 13:59:47.88
初心者におすすめの開発環境を教えてください
691デフォルトの名無しさん:2011/11/16(水) 14:20:08.69
テキストエディタと端末
692デフォルトの名無しさん:2011/11/16(水) 14:26:47.40
netbeans
693デフォルトの名無しさん:2011/11/16(水) 15:10:11.96
>>690
スクラッチ
694デフォルトの名無しさん:2011/11/16(水) 15:57:18.92
テキストエディタと端末
695デフォルトの名無しさん:2011/11/16(水) 16:00:07.23
るりまに [[trap:Regexp]] とか [[trap:Numeric]] とかいった記述があるんだけど、
これなあに?
696デフォルトの名無しさん:2011/11/16(水) 16:04:45.40
Wiki記法の変換漏れかなんかじゃないか
697デフォルトの名無しさん:2011/11/16(水) 19:14:34.32
HTMLの整形なんてどうすればいいのか知らなかったけど
Nokogiriとか使えばいのかな?と、gem installして色々試してみた
パースすると実体参照は通常の文字に展開されちゃうんですね

#coding:UTF-8
require 'nokogiri'
require 'cgi'
file = 'nokogiritest.html'
word = /g/
doc = Nokogiri.HTML(IO.read(file))
doc.search('body//text()').each do |node|
next if node.parent.name == 'script'
next if node.parent.name == 'style'
if node.text.match(/#{word}/)
reptext = CGI.escapeHTML(node.text).gsub(/&[A-Za-z]+;|#{word}/){|m| word === m ? "<b>#{m}</b>" : m}
node.replace reptext
end
end
puts doc.to_html

多少HTMLの体裁が変わるけど、こんなんでいいのかな?
あとは、エンコーディングとかをケアすれば
いままでHTMLからのデータ抽出は正規表現でゴリゴリ書いてたけど
HTMLパーサー使うと簡単だったのか
698デフォルトの名無しさん:2011/11/16(水) 19:43:42.49
ちゃんとしてないhtmlで破綻するから、ゆるゆるのパーサを自分で書いたほうが使える
699デフォルトの名無しさん:2011/11/16(水) 20:25:32.48
NetBeansで始める事にしました。ありがとう
700デフォルトの名無しさん:2011/11/17(木) 22:03:54.69
for文マジ使わないのな。内部でeachとかもうね。存在意義がわかんね。
701デフォルトの名無しさん:2011/11/17(木) 22:21:53.64
forの概念がないとループを書くことすらできない人用

自転車の補助輪みたいなもん
動作はするがガラガラうるさいし本体の利便性は9割ほどダウン
702デフォルトの名無しさん:2011/11/17(木) 23:03:15.15
それは全然違う
703デフォルトの名無しさん:2011/11/17(木) 23:10:55.57
ループすら書けない香具師もドカタには多い

a1 = 10
a2 = 20
a3 = 30
・・・

とか延々と書いてあるソースみて卒倒したことがある
704デフォルトの名無しさん:2011/11/17(木) 23:11:54.80
rubyのforは他のとまったく違うよ
705デフォルトの名無しさん:2011/11/17(木) 23:18:59.72
while になるような for のほうがよかったな
706デフォルトの名無しさん:2011/11/17(木) 23:22:47.78
ならforとwhileは他とどうちがうの?
707デフォルトの名無しさん:2011/11/17(木) 23:24:08.94
rubyでfor使ってたら、上級者っぽく思えるぞ
708デフォルトの名無しさん:2011/11/17(木) 23:29:21.84
rubyは非直感的すぎて理解出来ない
709デフォルトの名無しさん:2011/11/17(木) 23:30:23.56
h = {
hoge: 'aaa',
fuga: 'bbb',
piyo: 'ccc'
}

for k, v in h
puts "key:#{k}, val:#{v}"
end

h.each do |k,v|
puts "key:#{k}, val:#{v}"
end
710デフォルトの名無しさん:2011/11/17(木) 23:41:05.80
JSみたくこういう書き方ってできないの?

h = {
 hoge: 'aaa',
 fuga: 'bbb',
 piyo: 'ccc'
 foo: function() {
   return this.hoge + this.fuga + this.piyo
 }
}
711デフォルトの名無しさん:2011/11/18(金) 00:13:33.85
JSのそれは、プロトタイプベースにおけるオブジェクトリテラル { } だということを
考えると、意味的に近く書くには次のようになると思う。

h = Class.new do
@hoge = 'aaa'
@fuga = 'bbb'
@piyo = 'ccc'
class << self
def foo; @hoge + @fuga + @piyo; end
end
end

p h.foo #=> "aaabbbccc"

そこまでして書くもんでもない気がする。
712デフォルトの名無しさん:2011/11/18(金) 00:27:11.13
要は hoge, fuga, piyo は foo からのみ見えてほしい、という要求なんだよね。
JavaScriptで無名functionをクロージャとして使うパターンなら、こうか。

h = lambda do
hoge = 'aaa'
fuga = 'bbb'
piyo = 'ccc'
{ foo: -> { hoge + fuga + piyo } }
end.call

p h[:foo][]
713デフォルトの名無しさん:2011/11/18(金) 00:44:00.46
すいません超基本だとは思うのですが質問させてください。あるプログラム中から他のプログラムを起動させるにはどうすれば良いのでしょうか?
714デフォルトの名無しさん:2011/11/18(金) 00:51:30.24
systemのこと?
715デフォルトの名無しさん:2011/11/18(金) 00:51:55.38
一番単純なのは system
716デフォルトの名無しさん:2011/11/18(金) 01:21:58.13
systemでできました!ありがとうございました!
717デフォルトの名無しさん:2011/11/18(金) 03:57:05.45
# ruby br.rb
phone_number = "0112510110"
name = "本部"

br = "\n"
(s = "") << br << phone_number << ": " << name << br
if br == "\n"
    print s
elsif br == s
    print "Why?"
end

BR = "\n"
(s = BR) << phone_number << ": " << name << BR
if BR == "\n"
    print s
elsif BR == s
    print "Why?"
end
718デフォルトの名無しさん:2011/11/18(金) 04:42:39.96
>>717
String#<<はself(左側)を返すから
719デフォルトの名無しさん:2011/11/18(金) 05:08:36.17
<<はオブジェクトそれ自体を変更しちゃうメソッドだから。つまり
s = "abc"
t = s
t << "def"
とすればtだけでなくsも変更されてしまうから。
早いし+=よりも<<を使えってよく言うけどこの点だけは注意ね
720デフォルトの名無しさん:2011/11/18(金) 07:08:33.73
メソッドの説明に書いてあることだな
説明はよく読んで使ってくださいという話にしかならんのだが
721デフォルトの名無しさん:2011/11/18(金) 07:15:11.45
大文字ってC言語のconstみたいなものと思ってたが
破壊的メソッドは警告も無く通っちゃうんだな
722デフォルトの名無しさん:2011/11/18(金) 07:52:55.92
>>721
定数はあくまで参照先を変更できないだけだからな
オブジェクトの状態を変更させたくないのであればfreezeする
もっとも、これも結局完璧ではない
freezeされたオブジェクトが参照しているオブジェクトには破壊的変更が効く
723デフォルトの名無しさん:2011/11/18(金) 09:23:16.82
Rubyにも、コンテキストに応じた型が欲しいと感じる今日この頃。
724デフォルトの名無しさん:2011/11/18(金) 15:15:09.62
netbeans使うと補完リストが出てくるまでに5秒以上かかるので警告のダイアログみたいのが出るのですが
ここの先輩方でnetbeansをご使用している方は快適なのですか?
HSP+公式の専用エディタの経験しかなくて恐縮なんですが
基本的にRubyの開発って高スペックでおこないべき言語なんでしょうか?
725デフォルトの名無しさん:2011/11/18(金) 15:19:10.97
× Rubyの開発は高スペックで行なうべき
○ NetBeansでの開発は高スペックで行なうべき
726デフォルトの名無しさん:2011/11/18(金) 15:35:09.56
NetBeansやEclipseはメモリ1GB程度だとかなり辛いと思う
727デフォルトの名無しさん:2011/11/18(金) 15:45:29.56
何度か言われてるが、Rubyの学習のために別途新規ソフトウェアを導入してそれに習熟するなんてのは遠回りで無駄だからやめとけ
Rubyスクリプト書くのなんて普段使ってるやつでいいから

普段使ってるのがそもそもないという場合もありそうだけど
728デフォルトの名無しさん:2011/11/18(金) 16:01:05.82
>>724
netbeans使ってる人なんて少数というか、RubyでIDE使ってる人自体が少数派だと思う。
重さに機能が見合わないし……。
729デフォルトの名無しさん:2011/11/18(金) 16:24:14.79
この言語使ってるやつってwillcom信者と同じ匂いがする。
外に目を向けなさい
短所しか見えてこないはず
730デフォルトの名無しさん:2011/11/18(金) 16:45:31.58
>>729
こちらでどうぞ

最高にド低脳な発言してください in ム版(XVII)
http://hibari.2ch.net/test/read.cgi/tech/1179424842/
731デフォルトの名無しさん:2011/11/18(金) 16:47:10.48
用途を考えれば短所も糞もなく一番最初に覚えた言語使えばいい領域だからな
732デフォルトの名無しさん:2011/11/18(金) 18:09:17.63
>>729
自分はphpしかできないのでpythonかrubyをどっちか覚えておきたいのですが短所ってなんですか?
733デフォルトの名無しさん:2011/11/18(金) 21:39:27.39
はあ
734デフォルトの名無しさん:2011/11/18(金) 21:45:28.80
何年経ってもRuby爺さんたちのIDE嫌いは治らんのう
735デフォルトの名無しさん:2011/11/18(金) 23:03:55.43
いやそれ煽ってるのおそらくRubyすら使ってない人が一人でやってるだけだし

動的言語はそもそも汎用IDEと相性が悪い上に
Rubyの用途的にそこまで根性入れてRubyを対応させる人も出ない
いつものエディタとターミナルで書いてテストして実行して書いてテストして実行する以上の大掛りなものが必要なら、そりゃ素直にJavaを使えばいい
まさかこのご時世にまさかRubyひとつしか使えないわけでもあるまい?

RubyをLinuxの起動スクリプトに採用させようみたいな痛々しさに似ている
736デフォルトの名無しさん:2011/11/18(金) 23:06:03.08
何年経ってもRuby爺さんたちのIDE嫌いは治らんのう
737デフォルトの名無しさん:2011/11/18(金) 23:08:19.54
このスレ'IDE'に反応して長文で発狂するスクリプトでも仕込んであるのかw
738デフォルトの名無しさん:2011/11/18(金) 23:13:12.76
IDEが嫌いなんじゃなくてRubyにまともに対応したIDEがないってだけなんだけどね。
739デフォルトの名無しさん:2011/11/18(金) 23:17:01.65
Ruby爺さんがIDE嫌ってるのは

* 重い
* Emacsで俺IDEを作成済
* IDEの質問がここに持ちこまれると面倒
* 爺さんだから

以上の5点が挙げられる
740デフォルトの名無しさん:2011/11/18(金) 23:17:03.20
だれか作っちくりー
741デフォルトの名無しさん:2011/11/18(金) 23:19:05.51
>>739
スペイン宗教裁判?
742デフォルトの名無しさん:2011/11/18(金) 23:20:23.93
>>738
そんなコストかけて作る理由ないしな
そもそもrubyがIDE向けの静的情報持ってないし渡さない
RDEすら破綻しているというのに汎用でとか無理難題
743デフォルトの名無しさん:2011/11/18(金) 23:22:14.39
>>741
yes
744デフォルトの名無しさん:2011/11/18(金) 23:40:35.46
ruby-talk MLで紹介されていたリンクを紹介
思ったよりも多くのRuby対応IDEはあるみたいだね

Ruby Code Editors - GitHub
 https://github.com/cwgem/koans-tutorial/wiki/Ruby-Code-Editors

ただ、ruby-talk MLでも「VIMでええやん(英語)」という意見が多いように思う
745デフォルトの名無しさん:2011/11/18(金) 23:53:26.07
今XMLパーサってNokogiri使っとけばいいのかな
REXMLより早いらしいし
746デフォルトの名無しさん:2011/11/19(土) 00:00:43.65
現実問題Windowsでそれなりの完成度でRubyのコーディング支援してくれるのって
NetBeandsくらいしかないのに
毎度毎度このアホな流れになるよな。
まあ重かったらテキストエディタ使うしかない。
747デフォルトの名無しさん:2011/11/19(土) 00:09:14.74
ていうか
「使いやすくてRubyの開発効率がアップするようなおすすめIDEは今のところ特にないので自分の使え」という事実で発狂するのは
「IDEを使いこなせずにテキストエディタにしがみつくRubyユーザー」などではなく、単にIDE厨なのでは
748デフォルトの名無しさん:2011/11/19(土) 00:16:52.83
> 「使いやすくてRubyの開発効率がアップするようなおすすめIDEは
> 今のところ特にないので自分の使え」という事実
アプリオリな事実ですね。わかります
749デフォルトの名無しさん:2011/11/19(土) 00:17:03.63
Terapadで作業してますがいけませんか
750デフォルトの名無しさん:2011/11/19(土) 00:21:18.41
求めるサポートがキーワードの色付け程度でいいならそれでいいんじゃね
751デフォルトの名無しさん:2011/11/19(土) 00:56:54.50
eclipseのrdtじゃ駄目ですか?
これしか使ったことないのですが
752デフォルトの名無しさん:2011/11/19(土) 02:11:52.27
>>751
自分が使いやすいならそれでいいんじゃないの。

起動が遅かったりときどき妙に重くなる割には大した機能がないから俺は使わないけど。
753デフォルトの名無しさん:2011/11/19(土) 02:14:00.14
>>752
何を使ってるの?
754デフォルトの名無しさん:2011/11/19(土) 02:25:21.51
これだけレス連ねても「私はIDEが嫌いだ」から
1バイトも情報量が増えていないのがすごいなw
755デフォルトの名無しさん:2011/11/19(土) 03:04:40.03
起動もそこそこ早く、動作も軽く
プロジェクトを生成しなくとも単体ファイルを扱える手軽さで
requireしたCモジュールの補完も効いちゃうよってな
PyScripterみたいなのが欲しいな
756デフォルトの名無しさん:2011/11/19(土) 07:18:31.94
>>747
たぶんそんなとこだと思うよ
彼がRubyを使っているかどうかも怪しい
使ってなくても煽れるようなことしか書かないし
757デフォルトの名無しさん:2011/11/19(土) 08:58:48.41
>>710
意味的+記述の類似性から見て以下が近いのではないだろうか?

(h = Object.new).instance_eval do
@hoge = 'aaa'
@fuga = 'bbb'
@piyo = 'ccc'
def foo; @hoge + @fuga + @piyo end
end

p h.foo #=> "aaabbbccc"
758デフォルトの名無しさん:2011/11/19(土) 09:51:43.26
vimがRuby開発におすすめおすすめ言われるので、vimを試そうとしたんだけど
Windows上でrubyを入力補完できるvim環境をうまく構築できなくてやめてしまった
あれってLinux上なら、簡単に環境を構築できたりするものなの?
759デフォルトの名無しさん:2011/11/19(土) 10:33:56.09
http://scan.netsecurity.ne.jp/article/img/2011/11/13/27625/93.html
tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけど有名らしいね
動画ありませんか?
760デフォルトの名無しさん:2011/11/19(土) 11:36:44.19
>>758
入力補完なんてしないよ
使い慣れたエディタでおk
761デフォルトの名無しさん:2011/11/19(土) 11:45:29.59
vimのエディタとしての機能とRubyプログラミングを手助けする機能の融合がウマい、という程度の話でしかない
あらかじめvim(gvim)に習熟していないのなら選択する理由は1ミリもない
Emacsの選択理由もほぼ同じ
762デフォルトの名無しさん:2011/11/19(土) 12:02:01.45
「いいIDEがあれば使うけどまともなものないよね」という話でしかないのに、
どうしても「IDEが嫌いだから使わない」ということにしたい人がいるようだ。

CやJavaならIDE使うだろ。RubyだとIDEで使い物になるのがないからテキストエディタになるだけで。
763デフォルトの名無しさん:2011/11/19(土) 12:49:13.77
C++ や Java だと、IDE がないと、
クラスやメソッドが管理しきれないって気がするけど、
Ruby はそういうことで困ることはあんまりないのかな。
764デフォルトの名無しさん:2011/11/19(土) 13:02:38.88
ファイルが分散されてるRubyのほうがよっぽど困る
765デフォルトの名無しさん:2011/11/19(土) 13:13:20.12
Rubyにはなにか特別ななにかがあってJavaなんかのオブジェクト/メソッド構造よりメソッドが書きやすい、などということは断じて無い
よくもわるくもRubyの使用規模が人力検索と人力管理の範疇を越えてないというだけ
現時点でも、管理がめんどくさいことはまあめんどくさい
766デフォルトの名無しさん:2011/11/19(土) 14:14:14.69
困ったら p obj.class; p obj.methods とかはやるかな
767デフォルトの名無しさん:2011/11/19(土) 14:45:36.28
>>732
おれはpyhonはしらんが、ruby(rails)ならある程度しってる。
rubyってさあ、他の言語の片手間にやる言語だと思う。これを初心者に
やらせるってはどうかしてる。役に立つとしたらにrails。railsは「開発」は早いが動作は遅い。期日が厳しく、動作すればいいって時に使う感じだな。
後の考慮を考えたら、使う意味もないよ。

つーかさぁ
rubyの魅力の一つの
「よく楽しくプログラム」って書いてあるけど、このような書くということは
具体的に良い所がないということを察してほしい。

768デフォルトの名無しさん:2011/11/19(土) 14:52:53.72
2chには日本語ちゃんと勉強してからきなよ
769デフォルトの名無しさん:2011/11/19(土) 15:07:51.77
>>767
railsなら任せトキーナ(笑)
770デフォルトの名無しさん:2011/11/19(土) 16:21:01.87
わざわざ初心者スレに貶しに来る手合は御苦労な事だが、中級者以上のコミュニティでは相手にされていないというのは、社会人の常識。
俺はC、Java、Rubyその他数種類の言語を工程で使い分ける。
夫々、便利な所も使いにくい所もあるが、今時1つの言語で全部やろうとする方が無謀だしな。
771デフォルトの名無しさん:2011/11/19(土) 16:32:30.02
tro:~ nm$ irb
>> "O'Reilly".gsub( /'/, '\\\'' )
=> "OReillyReilly"

なぜ "O\'Reilly" にならないのでしょうか
772デフォルトの名無しさん:2011/11/19(土) 16:42:17.28
はい、リファレンス

gsub(pattern, replace) -> String

置換文字列 replace 中の \& と \0 はマッチした部分文字列に、 \1 ... \9 は n 番目の括弧の内容に置き換えられます。
置換文字列内では \`、\'、\+ も使えます。これらは $`、$'、$+ に対応します。

$'
現在のスコープで最後に成功した正規表現のパターンマッチでマッチした部分より後ろの文字列です。
最後のマッチが失敗していた場合には nil となります。
773デフォルトの名無しさん:2011/11/19(土) 17:55:05.16
>>772 ありがとうございます。 どうすたら \' を無効に殺せるのでしょうか?
774デフォルトの名無しさん:2011/11/19(土) 17:59:15.37
PythonとRuby両方使える方に質問させてください
WindowsのbatファイルのようなことをLinuxでやる場合はどっちの言語を選択したらいいですか?
現在はどちらが良く使われているものなのでしょうか?
Linuxのディストリビューションによって標準で採用している言語も違うものでしょうか?
775デフォルトの名無しさん:2011/11/19(土) 18:14:01.49
今はgsubとsubの第2引数を使ってる人はいないと思う
ブロックを使う書き方だけになってるはず

irb> puts "O'Reilly".gsub(/'/){"\\'"}
O\'Reilly

書こうと思えば第2引数でもエスケープで書けるのだが、正しく読むのも正しく書くのもめんどくさい

irb> puts "O'Reilly".gsub(/'/,"\\\\'")
O\'Reilly
irb> puts "O'Reilly".gsub(/'/,'\\\\\'')
O\'Reilly
776デフォルトの名無しさん:2011/11/19(土) 18:41:31.32
>>773
\を二重エスケープすればいい
p "a'b".gsub(/'/, '\\\\\'') #=> "a\\'b"
p "a'b".gsub(/'/, "\\\\'") #=> "a\\'b"

""の中で\文字を表すのは\\だから
"a\'b"じゃなくて"a\\'b"な。

でもめんどいよね。
777デフォルトの名無しさん:2011/11/19(土) 18:51:19.46
>>774
バッチファイル相当なら、PythonでもRubyでもなく
シェルスクリプトだと思うぞ
778デフォルトの名無しさん:2011/11/19(土) 18:55:35.98
>>775,776 ありがとうございました。 ブロックを使う書き方がわかりやすいので、覚えようと思います。
779デフォルトの名無しさん:2011/11/20(日) 22:49:27.56
RailsのPlug-inを作ったのでちょっと宣伝させて頂きます
fixtureを扱うPlug-inですが特徴は下のような感じです
1.yamlよりもcsvを優先する
2.migrationでテーブル構成が変わっても、ロードを停止しないで、カラムの変更点を検知して値を補完する
3.テーブル名と、fixtureのファイル名を一致させないでも自由なロード&ダンプが出来る機能
4.FactoyGirl風の読み込みフィルタで、Fixtureのデータを加工しながら読み込む事が出来る

世間的にはFactoryGirlの流れですが、csvでデータを作ってExcelの方が性に合っていたので
これまでのfixtureの欠点を解決する方向で出来ないかな、と
自分で入れたり改良してきたりしていたgemの機能をひとまとめにして見ました
780779:2011/11/20(日) 22:50:36.39
しまった、スレ間違えました。
流してください…(汗
781デフォルトの名無しさん:2011/11/21(月) 12:06:38.36
\u3042は「あ」です

文字列とユニコードを相互変換したいのですが
便利なメソッドは搭載されてますか?
782デフォルトの名無しさん:2011/11/21(月) 12:21:42.11
例によって1.9なら直接できる

ruby-1.9.2> puts "\u3042"

ruby-1.9.2> puts 0x3042.chr('UTF-8')

ruby-1.9.2> p 'あ'.ord.to_s(16)
”3042”
ruby-1.9.2> 'あいう'.each_codepoint{|codep| p codep.to_s(16)}
"3042"
"3044"
"3046"

1.8.7 はpack/unpack必須でめんどくさいっすな

ruby-1.8.7> puts [0x3042].pack('U*')

ruby-1.8.7> p 'あ'.unpack('U*')
”12354”
ruby-1.8.7> p 'あ'.unpack('U*').map{|x| x.to_s(16)}
["3042"]
783デフォルトの名無しさん:2011/11/21(月) 12:24:53.77
>>782
ありがとうございます
puts 'あ'.ord.to_s(16)を実行すると82a0が帰ってきます
ruby1.9.3p0です
784デフォルトの名無しさん:2011/11/21(月) 12:32:02.10
ん、間違ってる
最初 puts でやってて、p のほうが戻り値わかりやすいと思って変えて、ここだけ手で書いたら案の定

ruby-1.8.7> p 'あ'.unpack('U*')
[12354]

pack/unpack は Ruby 1.8.7 でも Ruby 1.9.x でも動く

ruby-1.8.7> p 'あいう'.unpack('U*').map{|x| x.to_s(16)}
["3042", "3044", "3046"]

1.9.x では Encoding 指定不足なときコケるかと思うがそこまで面倒見れんとか書いてたらそのまんまだ

>>783
その日本語文字は UTF-8 ではなく Shift_JIS (というか CP932) だ
UTF-8 の文字を ord にかけろ

ruby-1.9.2> p 'あ'.encode('CP932').ord.to_s(16)
"82a0"
ruby-1.9.2> p 'あ'.encode('UTF-8').ord.to_s(16)
"3042"
785デフォルトの名無しさん:2011/11/21(月) 13:20:23.43
>>784
勉強になりました
rubyは文字コードに厳しいですね
786デフォルトの名無しさん:2011/11/21(月) 13:28:11.06
い、いや、このへんを厳しいと言われると流石にどうにも
Shift_JISなものを渡して、それがUTF-8になったときのUnicode表現をよこせというのはわりと逆ギレに近い
787デフォルトの名無しさん:2011/11/21(月) 13:38:27.65
便利辞書的なメソッドとしてあってもいいかなあと思わなくもなくもない
結局、渡される文字のエンコーディングの自動判定が難しいので自力で指定してくれという部分に帰着してしまうが

この文字列のエンコーディングが何かというのを意識するのは、意識のしかたを覚えてしまえば決して難しくはない
…というか、意識しなくて済むようになる
めんどくさいように思うのは最初だけ

飼い慣らされてしまうともいう
788デフォルトの名無しさん:2011/11/21(月) 13:53:36.22
>文字のエンコーディングの自動判定が難しいので自力で指定してくれ
これなんだよなあ
文字コード考えた人たちがこうならないようにしといてくれれば
煩わしくならなかったんだけど
789デフォルトの名無しさん:2011/11/21(月) 18:39:50.62
初歩的(?)な質問です
先日Ruby1.9.2p290をttp://rubyinstaller.org/よりダウンロードしたインストーラを用いてXPへインストールしました
そこで早速インタプリタirbを利用したところをエラーが出てしまいました……(長いので次レスに載せます)

購入した入門書によるとirbや-rdebugは標準で添付されているとのことですが、
何か他にインストールもしくはダウンロードしなければならないモノがあるのでしょうか?
790デフォルトの名無しさん:2011/11/21(月) 18:40:49.75
C:\Ruby>irb
C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2095:in `expand_path': non-absolute home (ArgumentError)
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2095:in `_rl_read_init_file'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2078:in `rl_read_init_file'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2499:in `readline_initialize_everything'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:3730:in `rl_initialize'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4737:in `readline'
from C:/Ruby192/lib/ruby/site_ruby/1.9.1/readline.rb:40:in `readline'
from C:/Ruby192/lib/ruby/1.9.1/irb/input-method.rb:115:in `gets'
from C:/Ruby192/lib/ruby/1.9.1/irb.rb:139:in `block (2 levels) in eval_input'
from C:/Ruby192/lib/ruby/1.9.1/irb.rb:273:in `signal_status'
from C:/Ruby192/lib/ruby/1.9.1/irb.rb:138:in `block in eval_input'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `call'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `buf_input'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:103:in `getc'
from C:/Ruby192/lib/ruby/1.9.1/irb/slex.rb:205:in `match_io'
from C:/Ruby192/lib/ruby/1.9.1/irb/slex.rb:75:in `match'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:286:in `token'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:262:in `lex'

    (次レスに続きます)
791デフォルトの名無しさん:2011/11/21(月) 18:41:30.11
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:233:in `block (2 levels)in each_top_level_statement'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'
from C:/Ruby192/lib/ruby/1.9.1/irb.rb:155:in `eval_input'
from C:/Ruby192/lib/ruby/1.9.1/irb.rb:70:in `block in start'
from C:/Ruby192/lib/ruby/1.9.1/irb.rb:69:in `catch'
from C:/Ruby192/lib/ruby/1.9.1/irb.rb:69:in `start'
from C:/Ruby192/bin/irb:12:in `<main>'

(エラー出力ここまで)
792デフォルトの名無しさん:2011/11/21(月) 19:25:26.37
Rubyのreadline実装と環境変数まわりの問題みたい
rbreadline.rbでぐぐれば解決方法説明してくれてるBlogがみつかるよ
793デフォルトの名無しさん:2011/11/21(月) 19:35:04.86
>>792
解決しました
ありがとうございます
794デフォルトの名無しさん:2011/11/21(月) 20:49:16.22
クラスインスタンス変数というのがあると最近しったのですが、
使い所はどんな場合なんですか?
これがあるおかげでこんな処理がすっきりかける!みたいな。

795デフォルトの名無しさん:2011/11/21(月) 20:56:12.62
わかんなければ必要ないよ、うん
これを使うために構造を変えるのはよくない
796デフォルトの名無しさん:2011/11/21(月) 21:35:02.83
>>794
使いどころは「クラスに属する変数を使いたいけど、継承関係を超えて共有されると困る」という場合。

使用例は知らね
797デフォルトの名無しさん:2011/11/21(月) 21:41:49.48
そのクラスを誰も継承したりしない場合、クラス変数とコンセプト的な違いはない
つまり、完全自作スクリプトではほとんど出番がない(attr_accessorで作れるという差はあるけど…)

gemとかにして公開する場合は、そのクラスを継承して新しい改造クラスを作る人が出る可能性があるから、
継承で持ち越されるクラス変数に設定値を入れる構造はまずい
798デフォルトの名無しさん:2011/11/22(火) 16:10:59.35
>>793
お前は長男か。
あまりにも自分本位すぎる。
799デフォルトの名無しさん:2011/11/22(火) 16:52:00.14
解決してお礼を述べてるのに何言ってんだこいつ
800デフォルトの名無しさん:2011/11/22(火) 17:00:28.31
解決しましたありがとうございます → 長男
解決したありがとう → 次男
解決したよありがとうおにいちゃん → 三男
801デフォルトの名無しさん:2011/11/22(火) 17:01:08.82
どう解決したか具体的に書けば同じトラブルに遭遇する人が助かるのに
書かないところが自分本位だという話だと思う。
802デフォルトの名無しさん:2011/11/22(火) 17:39:06.02
解決方法→rbreadline.rbでぐぐれば解決方法説明してくれてるBlogがみつかるよ
803デフォルトの名無しさん:2011/11/22(火) 18:30:38.44
それは解決方法じゃなくて解決なり回避への第一歩だね
ぐぐってBlogみつけただけじゃirbの調子はよくならない
しかもBlogの記事も環境変数HOME等をクリアしろとかあくまでその場しのぎなもの

トラブルの原因になったと思われる環境(Cygwinの有無や環境変数の値など)、
実際に自分はどうやって回避したのか、まで書いてくれれば本当はよかった
804デフォルトの名無しさん:2011/11/22(火) 18:40:13.65
>>792を見て解決したと言ってるのだから、
>>793はBlogに書いてあることをそのまま実行しただけと推定するのがまともな思考だな。
805デフォルトの名無しさん:2011/11/22(火) 18:56:12.39
漏れは推定より確信のほうがいいな
806デフォルトの名無しさん:2011/11/22(火) 20:12:15.71
宿題全然わかんないんだけど晒していいの?
807デフォルトの名無しさん:2011/11/22(火) 20:30:38.60
答えが返ってくるかもしれないし、無視されるかもしれない
「ここがわかんない」とかじゃなくて丸投げだとスルーされる可能性は高い
808デフォルトの名無しさん:2011/11/22(火) 20:36:05.75
宿題スレ落ちてるのか
809デフォルトの名無しさん:2011/11/22(火) 21:00:01.55
>>806
Rubyで宿題出すようなとこはこのスレくらいは見てるので、丸写しするとむしろ減点になるぞ

っていうか、授業で習った部分だけでプログラムを書くのは部外者には意外と難しい
810デフォルトの名無しさん:2011/11/22(火) 21:14:17.55
Rubyの宿題がでる時代なのか
俺なんて宿題じゃなくて趣味でいつも初歩レベル?の質問をいつもここでしてたのに
811デフォルトの名無しさん:2011/11/22(火) 21:16:22.42
コピーされるに決まってるのにコードの宿題を出すようなアホな教師どもが
このスレをチェックしてるわけがない
812デフォルトの名無しさん:2011/11/22(火) 21:18:48.89
>>811は高卒
813デフォルトの名無しさん:2011/11/22(火) 23:01:51.85
関数の問題で、
def lect(letter,height,width)#長方形
(1..height).map do |n| letter*width end
end

def emp(height,width)#空白
(1..height).map do |n| " "*width end
end

def horizon(l_pattern,r_pattern)
#上二つの模様を左右に並べる。
end

これのhorizonが全く分からなくて困ってます。ヒントにはzipメソッドを使うとか。
814デフォルトの名無しさん:2011/11/22(火) 23:13:54.56
どんな動作させたいのか言ってくれないとなんとも
なんとなく、

*** ++++
*** ++++
*** ++++
    ++++

みたいな出力をさせたいんじゃないかなと思うのだがっていうかhorizonの2つの引数なんだ
815デフォルトの名無しさん:2011/11/22(火) 23:22:07.67
チェック柄を作りたいんだ。lectが色の部分、empが白い部分。
引数はこの二つの模様の事です。宿題には左の模様、右の模様って書いてあったから勝手に作ったけどもしかしてこの引数にlectとempが入るのかな。
816デフォルトの名無しさん:2011/11/22(火) 23:24:24.38
>>810
一般教養なら結構Rubyやる講義結構あるみたいだよ。

日本語で調べやすくて、それなりにちゃんとしたプログラムが書けて、おまじないが少なくて、
と、講義で取り扱うにはわりと条件がいいからかな。
817デフォルトの名無しさん:2011/11/22(火) 23:31:57.14
irbでlectとempの結果を調べてみるべき。

lect と emp から「各行に並ぶ文字列」の配列がそれぞれ返ってくるから、
lectの結果.zip(empの結果)
すればよろし。

…rectだよね?
818デフォルトの名無しさん:2011/11/22(火) 23:38:29.42
たのしそうな講義だなあ
元ネタはHaskell本かしら
819デフォルトの名無しさん:2011/11/22(火) 23:48:34.60
rectすねすません(;_;)
irbで確認しましたけどそれでどうしたらいいのでしょう。
820デフォルトの名無しさん:2011/11/22(火) 23:55:12.16
いっそ宿題の画像を上げてしまった方が(ry
821デフォルトの名無しさん:2011/11/23(水) 00:03:54.71
http://beebee2see.appspot.com/i/azuYnvuXBQw.jpg
こんなんですが、甘えさせて頂きます。
822デフォルトの名無しさん:2011/11/23(水) 00:21:17.88
引数letterってどういう意味かと思った。文字ならcharの方が良い
823デフォルトの名無しさん:2011/11/23(水) 00:40:19.52
あ、本当ですか変えてみます。
824デフォルトの名無しさん:2011/11/23(水) 01:02:58.60
どういう模様を作らせたいのかわかりにくい。作らせたい模様を図示しろよって感じだな。

def rect(char, height, width)
 (((char * width) + "\n") * height).chomp
end

def emp(height, width)
 rect(' ', height, width)
end

def horizon(pattern1, pattern2)
 pattern1.lines.zip(pattern2.lines).collect{|i| i.collect{|k| k.chomp}.join}.join("\n")
end

def vertical(pattern1, pattern2)
 pattern1 + "\n" + pattern2
end

def double_horizon(pattern)
 horizon(pattern, pattern)
end

def double_vertical(pattern)
 vertical(pattern, pattern)
end

h, w = 5, 8
x, y = rect('-',h,w), rect('*', h, w)
puts horizon(x, y), '', vertical(x,y), '', double_horizon(x), '', double_vertical(y)

こういうこと?
825デフォルトの名無しさん:2011/11/23(水) 01:13:48.65
実はチェック柄ではなくチェス盤を作れというものなんです。そのためheightとwidthは8×8になります。特定怖れて偽りましたゴメンなさい、、
826デフォルトの名無しさん:2011/11/23(水) 01:24:35.02
じゃあ

h = w = 8
a, b = emp(h,w), rect('*', h, w)
l1 = double_horizon(double_horizon(horizon(a,b)))
l2 = double_horizon(double_horizon(horizon(b,a)))
puts double_vertical(double_vertical(vertical(l1,l2)))

でいいじゃん。おしまい。
一回自分で考えて書き直さないと多分ばれるよ、ここ写したの。
827デフォルトの名無しさん:2011/11/23(水) 01:42:33.23
全くの初心者から半年、Rubyもちょっと分かってきて他の言語に興味出てきて基本を学ぼう!と思い
「プログラムは何故動くのか」を買ってきた。
C言語とかってかなり難しいんだな・・・Rubyでプログラミング初めて良かった。Cなら確実に挫折してた。
ありがとうRuby。
828デフォルトの名無しさん:2011/11/23(水) 02:00:58.35
>>813
http://codepad.org/GmJZsqD0

zipとcollect使ってチェック柄できますた
829デフォルトの名無しさん:2011/11/23(水) 07:06:31.96
ちょっと待って、1マスの大きさってことは、面積40ピクセルの黒塗り長方形を自力で画面に書かなければならない?
830デフォルトの名無しさん:2011/11/23(水) 07:36:20.13
heightが5、widthが8で1マスで、8×8マスでしたorz
後は自力でやってみます。
助かりましたありがとうございました!
831デフォルトの名無しさん:2011/11/23(水) 07:37:01.32
そーゆーふーに解釈することも可能だが、引数に文字ってあるわけだし、
rect('*', 3,2) は

**
**
**

という黒マス用長方形を描くための一連のデータを返すと考えるのが妥当
empが白マス用長方形
初期値が '*' と 3 と 2 なら

  ** ** ** **
  ** ** ** **
  ** ** ** **
** ** ** **
** ** ** **
** ** ** **
  ** ** ** **
  ** ** ** **
  ** ** ** **
** ** ** **
** ** ** **
** ** ** **
  ** ** ** **
  ** ** ** **
  ** ** ** **

という図形になるようなプログラムを作れという課題だろう
832デフォルトの名無しさん:2011/11/23(水) 13:27:00.18
そんな感じだと思います。この感じのチェス盤となります。
833デフォルトの名無しさん:2011/11/23(水) 13:28:22.94
まだやってたのか…
834デフォルトの名無しさん:2011/11/23(水) 13:32:26.75
夜まで用事がありまして、、帰ったら完成させます。皆さんありがとうございます。
835デフォルトの名無しさん:2011/11/23(水) 21:34:02.14
14:53
っていう時間を秒に変換するマクロってありませんか?
:でパースして14*60 + 53ってやらないとダメですか?
836デフォルトの名無しさん:2011/11/23(水) 21:51:19.37
Rubyにマクロなんてあったっけ?
837デフォルトの名無しさん:2011/11/23(水) 22:17:24.31
>>835

irb(main):001:0> str = "14:53"
=> "14:53"
irb(main):002:0> if /^(¥d+):(¥d+)$/ =~ str then $1.to_i * 60 + $2.to_i else nil end
=> 893

これではダメなの?十分に短いコードだとと思うけど....
838デフォルトの名無しさん:2011/11/23(水) 22:19:19.89
=> 893
偶然とはいえ返り値にフイタ
839デフォルトの名無しさん:2011/11/23(水) 22:37:20.38
>>837
なんか僕が書いたコードと全然違いますね
こういう書き方勉強になりました
840デフォルトの名無しさん:2011/11/23(水) 22:57:13.22
文脈を考慮せず14:53だけ見ると14時53分にも見えるな。
841デフォルトの名無しさん:2011/11/23(水) 23:33:32.69
えっ違うの?

…あ、違うんだ
分と秒の区切り文字も : でいいんだっけ?
842デフォルトの名無しさん:2011/11/23(水) 23:38:00.88
質問者が 秒に変換する と言って、変換式が 14*60+53 だから
分:秒フォーマットなのでしょう。
843デフォルトの名無しさん:2011/11/23(水) 23:38:32.29
yum installで入るruby古すぎ

rpm作ろうとcheckinstallというので作成してみが、
インストールできるが、アンインストール後に余計なファイルが残る。





844デフォルトの名無しさん:2011/11/23(水) 23:57:29.71
>>841
よろしい
だから、 時:分と 分:秒 を字面で見わけることはできない
845デフォルトの名無しさん:2011/11/24(木) 00:01:59.04
>>843
まあデフォルトでRuby1.8.2やRuby1.8.5がインストールされる環境もあるということは認識しておいたほうがよ…くても対応なんてできんわwwww
846デフォルトの名無しさん:2011/11/24(木) 00:04:30.28
Windowsで日本語のファイル名は1.9系ではまだ扱えないので1.8を使うしかない。
2.0で対応するの?
847デフォルトの名無しさん:2011/11/24(木) 00:20:48.46
Unicodeファイル名は1.9で無理なら1.8でも無理だろ
1.9.3ではopenできるんじゃなかったっけ
848デフォルトの名無しさん:2011/11/24(木) 00:31:30.86
>>835
これでも出来る。(1.8.7、1.9.2)
require 'time'
s = "14:53"
p Time.parse(s).min * 60 + Time.parse(s).sec
849デフォルトの名無しさん:2011/11/24(木) 00:32:55.00
846が馬鹿なだけ
850デフォルトの名無しさん:2011/11/24(木) 00:39:36.57
rakeで
namespace :foo do
 task :bar do ... end
 task :baz do ... end
end
としたとき、rake -Tで
foo:bar
foo:baz
とでてくるけど、task foo を定義するのはどうしたらいい?
ちょうど、ブラウザで/foo/ にアクセスするとデフォルトで /foo/index.html にアクセスするようなかんじ。
 task :default
を定義したらいいのだと思ったけど、違うみたい。
851846:2011/11/24(木) 00:39:51.88
852デフォルトの名無しさん:2011/11/24(木) 00:40:48.87
意味が分からん
1.9で扱えないと何で1.8?
それ以前に1.9で扱えるし
853デフォルトの名無しさん:2011/11/24(木) 00:41:08.96
>>848
それ、単に14が無視されてないか?
854デフォルトの名無しさん:2011/11/24(木) 00:49:04.43
あö.txt
あö

をopenしてみたけど1.8.7はアウトで1.9.3はOKだったよ
855デフォルトの名無しさん:2011/11/24(木) 10:58:00.95
>>851
なんでブログの記事なの?

いや、わりとマジで
856デフォルトの名無しさん:2011/11/24(木) 11:14:40.40
>>846はRubyの実行環境なんて持ってないんだよ言わせんな恥ずかしい
857デフォルトの名無しさん:2011/11/24(木) 15:07:05.42
>>824
> pattern1.lines.zip(pattern2.lines).collect{|i| i.collect{|k| k.chomp}.join}.join("\n")

完成したんですがここのとこだけよく分からないのです。どうなってるんですか?
858デフォルトの名無しさん:2011/11/24(木) 15:43:32.21
>>857
横レスだけど、>>824を(勝手に)折り曲げてみた。これなら読めるかな?

pattern1.lines.zip(
  pattern2.lines
).collect { |i|
  i.collect { |k| k.chomp }.join
}.join("¥n")
859デフォルトの名無しさん:2011/11/24(木) 16:03:19.00
そーゆー物理行的な意味ではないと思う
860デフォルトの名無しさん:2011/11/24(木) 18:16:47.70
>>857
irb> "foo \n bar \n baz".lines
=> #<Enumerator: "foo \n bar \n baz":lines>
irb> _.zip("123 \n 456 \n 789".lines) # irb において _ はさっき実行した式の返り値
=> [["foo \n", "123 \n"], [" bar \n", " 456 \n"], [" baz", " 789"]]
irb> _.collect{|i| i.collect{|k| k.chomp } }
=> [["foo ", "123 "], [" bar ", " 456 "], [" baz", " 789"]]

irb> [1, 2, 3].collect{|e| e * 2 }
=> [2, 4, 6]

まだわからなければどこの何がわからないか具体的に書いたほうがいいよ
861デフォルトの名無しさん:2011/11/24(木) 19:28:29.07
>>848
require 'time'
Time.parse('14:53') #=> 2011-11-24 14:53:00 +0900

時:分 と認識するようですな

というわけで
(Time.parse('14:53')-Time.parse('00:00')).div(60) #=> 893
862デフォルトの名無しさん:2011/11/25(金) 15:42:56.76
>>860
collectの中にcollectがあるのがよく分からないです。あと二つ目のcollectに付くjoinも。
863デフォルトの名無しさん:2011/11/25(金) 16:01:24.89
>>857がよくわからないのでバラしてください、に対する回答が>>858>>860なのが興味深い
初心者が回答してるんだと思いたい
864デフォルトの名無しさん:2011/11/25(金) 23:38:32.33
鯖復帰記念ぱぴこ

>>862
まずはcollectの後ろについたjoinについて
これはcollectした結果にさらにjoinを適用するということ
たとえば ["a", "b", "c"].collect{|str| str.upcase }.join は
["A", "B", "C"].join に評価されて、これはさらに "ABC" に評価される

あと二重のcollectだけど、collectするデータが二重の配列(配列の配列)なのと対応してる
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| p inner_array }
["a", "b"]
["x", "y"]
=> [["a", "b"], ["x", "y"]]
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| inner_array.collect{|char| char.upcase }}
=> [["A", "B"], ["X", "Y"]]
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| inner_array.collect{|char| char.upcase }.join }
=> ["AB", "XY"]
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| inner_array.collect{|char| char.upcase }.join }.join
=> "ABXY"

自分でirbで(できれば値をあれこれ変えながら)試すと理解が速いと思うよ
あと各メソッドについてマニュアル読んでなかったら読む
865デフォルトの名無しさん:2011/11/26(土) 02:48:42.14
>>862
pattern1とpattern2をそれぞれ"**\n**\n**", "--\n--\n--"だとすると、
linesすることで["**\n", "**\n", "**"], ["--\n", "--\n", "--"]というものが作れる(実際は配列じゃないけど便宜上)
["**\n", "**\n", "**"].zip(["--\n", "--\n", "--"])で返ってくるのは
[["**\n", "--\n"], ["**\n", "--\n"], ["**", "--"]]という配列の配列。
この大きな配列全体に対してcollect{|i| ... }すると、 i には["**\n", "--\n"]こういう配列が入る。

二回目のcollectや最初のjoinはこの小さい配列に対するもので、"**\n"と"--\n"から改行を取り除いた上でjoinして
"**--"こういう文字列にする。

これを繰り返して全体のcollectが済んだ時点で
["**--", "**--", "**--"]という感じの配列が返ってくるからjoin("\n")で間に改行を挟みながら連結すると

"**--\n**--\n**--"
**--
**--
**--

つまり
"**\n**\n**"
**
**
**

"--\n--\n--"
--
--
--
を横に連結したものが返ってくる、って寸法。


866uy:2011/11/26(土) 06:15:11.83





      み           づ           ら             い



867デフォルトの名無しさん:2011/11/26(土) 10:42:57.41
お前の視認能力か使ってるブラウザがゴミなだけ
868デフォルトの名無しさん:2011/11/26(土) 10:56:07.00
なにそのBrainF*ck
869デフォルトの名無しさん:2011/11/26(土) 18:14:11.66
>>864
>>865
とてもわかりやすくて理解出来ました。ありがとう。もっと勉強します。
870デフォルトの名無しさん:2011/11/26(土) 20:27:00.23
ちょっと相談なんだけど、webアプリを作ってるときに、
ブラウザでHTMLページに使うときの「パス」と、ファイルの場所を表す「パス」を、区別して名前をつけたいんだけど、どんな名前にすればいいでしょうか。
たとえば
HTTPリクエストで /~user/foo/bar.html というパスが指定されて、
それがファイルシステム上では /home/user/public/foo/bar.html というパスに相当する時、
path1 = '/~user/foo/bar.html'
path2 = '/home/user/public/foo/bar.html'
としているんですが、性質の違うものなのに両方にpathという名前を使っているので混乱します。
なにか両者を使い分ける、いい名前はないでしょうか。
他の人に聞いたら、virtual path と real path というのはどうかと言われたんですが、これはよく使われる名前でしょうか。
871デフォルトの名無しさん:2011/11/26(土) 20:47:34.23
uri_path と system_path なら説明なしでほぼ確実に理解してもらえる
片方だけでも意味が通るし、勘違いも起こらないかと思う

あと Ruby あんまし関係ないな
872デフォルトの名無しさん:2011/11/26(土) 20:55:35.50
>>870
uri1 = '/~user/foo/bar.html'
path1 = '/home/user/public/foo/bar.html'

が意図を表せていいんじゃないかな
'/~user/foo/bar.html' も、定義上は相対URIであることには間違いないわけだし
873デフォルトの名無しさん:2011/11/26(土) 23:43:41.25
サーバによるのかもしれないが、URLのパス部分はapacheだと
環境変数PATH_INFOに入るな。

fs_path, uri_path とかでもいいと思う。(fsは分かりづらい?)

あと、言語によらない話題なので、
クラス名・変数名に迷ったら書き込むスレ。Part20
http://hibari.2ch.net/test/read.cgi/tech/1311942721/
をご紹介。
874デフォルトの名無しさん:2011/11/27(日) 10:15:05.96
>>871-873
さんくす。
url_pathとfs_pathを使うことにしました。
875デフォルトの名無しさん:2011/11/27(日) 10:54:50.91
まさか採用するとは思わなかった
fsではなにがなんだかわからない
挙げられているうちで最悪のパターン
876デフォルトの名無しさん:2011/11/27(日) 11:39:43.19
まあ、初心者スレだからなあ
回答者が Ruby 初心者である可能性を考慮に入れないと

>>872
Ruby では変数名 uri は標準の URI オブジェクトであることが強く期待される(クラス名の downcase)
ただの文字列に単なる uri という変数名をあてがうのは「URI や URN と呼ぶのが正しい」などという主張とは全く関係なく好ましくない

じゃあ URI 文字列をなんて呼ぶのがいいんだという問題が残るんだが
… url でいいんじゃね(弱気
877デフォルトの名無しさん:2011/11/27(日) 11:51:15.95
ここで夢のハンガリアン記法が復活
878デフォルトの名無しさん:2011/11/27(日) 12:01:04.92
>>876
その理屈で行くと、変数名にpathって付けた時点で
「Pathnameオブジェクトであることが期待される」ってことになって
pathって変数名も好ましくないことになるんじゃないか?
879デフォルトの名無しさん:2011/11/27(日) 12:09:45.46
>>875
filesystem path だろう
Apacheがリクエストに含まれるパスを
実際のファイルシステムにマッピングするんだから
880デフォルトの名無しさん:2011/11/27(日) 12:40:50.54
>>878
>クラス名の downcase
881デフォルトの名無しさん:2011/11/27(日) 12:51:49.62
>>879
たぶん>>875はそういう「fsとは何か」ということについての講釈を聞きたかったのではないと思うぞ
882デフォルトの名無しさん:2011/11/27(日) 14:07:21.90
>>881
Webアプリの開発してる人ならfs_pathの近くにurl_pathがあれば
ああfsってファイルシステムのことだなと見当つけられるでしょ?
そういった文脈があれば「なにがなんだかわからない」ような代物ではない
883デフォルトの名無しさん:2011/11/27(日) 14:09:05.39
自己擁護のために勝手に条件付けを始めた
884デフォルトの名無しさん:2011/11/27(日) 14:14:41.67
>>883
どこが勝手につけた条件?

なんか最近このスレ変にいちゃもんつける人が増えたなあ
かといって役にたつアドバイスをするわけではなく
885デフォルトの名無しさん:2011/11/27(日) 14:24:13.60
「Webアプリの開発してる人なら」「近くにあれば」「文脈があれば」だろう
そんなん、たとえば変数定義のところを見れば一発だ
適宜内容をデバッグ表示させてもいい

しかし、変数名問題というものはそういうものではないはず
886デフォルトの名無しさん:2011/11/27(日) 14:31:26.86
若い人は知らないかもしれないが、変数名は6文字以内や8文字以内でなければならないという時代があったのですよ
887デフォルトの名無しさん:2011/11/27(日) 14:39:48.79
「わかりやすくて、極力短い」がよろしい
「とにかく短く、わかりやすさは人力でカバー」では20世紀と変わらない

ファイルシステムのパスなら filesystem_path か system_path、いいとこ filepath くらいだ
>>870のそれこそ文脈で、 fs と接頭詞に略して何も思わない時点でかなりヤバい
888デフォルトの名無しさん:2011/11/27(日) 14:42:38.58
fsって略語からfile systemって単語はすぐ連想できるし
逆にfile system以外の単語を思いつかないから個人的には許容範囲だわ
889デフォルトの名無しさん:2011/11/27(日) 14:45:36.59
説明的な名前をつけまくると1行がヨコに長くなってしまう問題が……
snake_caseが一般的な時点で不可避ではあるけど……
890デフォルトの名無しさん:2011/11/27(日) 14:50:32.28
おそらく「…fsってなーに? なんの略語?」という判断が入ること自体、あんまりよくないんだと思う
file_pathを見て「fileってなーに?」と考える人はおそらくいない
system_pathを見て「いや安易にsystemと言われましても送信先のクライアントシステムかもしれませんしアプリケーション自体をシステムと呼」とか考えるアスペはまずいない
891デフォルトの名無しさん:2011/11/27(日) 15:33:04.76
>>890
おそらく>>881,883はそんなアスペ症患者の一人なのではないかと....
892デフォルトの名無しさん:2011/11/27(日) 15:37:44.73
つーか、>>870 自身が挙げた real_path が何気に最適な訳な気がする
893デフォルトの名無しさん:2011/11/27(日) 16:03:34.54
じゃあ間をとってreal_fs_pathで
894デフォルトの名無しさん:2011/11/27(日) 16:25:16.69
filesystemだから全く考えることなしにとにかく自然に略してfs、はperlの文化っぽい気がするっぽい
895デフォルトの名無しさん:2011/11/27(日) 16:30:48.71
fsck, reiserFS, NFS, NTFS等々Perl以外でも普通に略すよ
896デフォルトの名無しさん:2011/11/27(日) 16:46:52.55
>>895
そういう話ではないと思う
897デフォルトの名無しさん:2011/11/27(日) 18:02:34.59
そもそも fs_path を提示した本人がカッコの中で疑問を呈しているというのに。
898デフォルトの名無しさん:2011/11/27(日) 18:14:25.12
>>874には全く伝わらなかったようだがな
899デフォルトの名無しさん:2011/11/27(日) 18:19:51.13
>>896
ここにもアスペが一人....
900デフォルトの名無しさん:2011/11/27(日) 18:22:57.98
870です。

>>882
>Webアプリの開発してる人ならfs_pathの近くにurl_pathがあれば
>ああfsってファイルシステムのことだなと見当つけられるでしょ?
>そういった文脈があれば「なにがなんだかわからない」ような代物ではない

おっしゃる通りです。
「url_path」と「fs_path」が対比されて使われているので、fsだけで十分わかります。
頻繁に登場する名前に「filesystem_path」なんて長すぎて。弊社が使うのはRubyであってJavaじゃないので。


901デフォルトの名無しさん:2011/11/27(日) 18:55:36.96
>>891
>>890
「fsは思考に一手間入るからダメ」という主張だと思うよ。
でもsystem_pathで思考に一手間入るのはアスペだけ、という話。
俺もsystem_pathあたりが妥当だと思う。

>>900
Rubyに「変数名は短く」なんて習慣はないがね。
902デフォルトの名無しさん:2011/11/27(日) 19:03:03.71
m = /(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d) (¥d¥d):(¥d¥d)/.match(str)
year = m[1]; mon = m[2]; day = m[3]; hour = m[4]; min = m[5]
というのを簡潔に書くには
_, year, mon, day, hour, min = m.to_a
という方法でいいでしょうか。
もっといい方法があればおしえてください。
903デフォルトの名無しさん:2011/11/27(日) 19:12:53.02
require 'time'
_, min, hour, day, month, year = Time.parse(m).to_a
904デフォルトの名無しさん:2011/11/27(日) 19:13:59.16
ああ、mじゃなくてstrだ
require 'time'
_, min, hour, day, month, year = Time.parse(str).to_a
905デフォルトの名無しさん:2011/11/27(日) 19:15:55.66
>>902
year, month, day, hour, min = m[1..5]
906デフォルトの名無しさん:2011/11/27(日) 20:44:08.62
Rubyってアンダースコアをパターンマッチみたいに使えたのか……
907デフォルトの名無しさん:2011/11/27(日) 21:01:08.74
え?
ダミー変数でしょ、これ
908デフォルトの名無しさん:2011/11/27(日) 21:27:12.24
うん、ダミー変数
irb で誤爆する
909デフォルトの名無しさん:2011/11/27(日) 22:40:19.49
たしかに言われてみれば、Rubyだと _ は普通の変数として認識されるから、
関数型言語でのタプルのパターンマッチ構文と良く似た書き方になるんだね
910デフォルトの名無しさん:2011/11/28(月) 12:46:50.41
>>902
個人的にはあまり使ってないけど

irb> /(?<hour>\d\d):(?<min>\d\d):(?<sec>\d\d)/ =~ '12:44:02'
=> 0
irb> [hour, min, sec]
=> ["12", "44", "02"]

正規表現を =~ の左辺にもってこないとタグの変数に代入されないので注意
911デフォルトの名無しさん:2011/11/28(月) 12:57:53.18
捨て変数つきの多重代入がベストだと思う
右辺部分はまあ好きにせえ
912デフォルトの名無しさん:2011/11/28(月) 13:05:59.40
Rubyは左辺の変数の数と配列の要素数が違ってもエラーにならないから
>>904のコードには注意がいる
だったらのように多少文字数が増えてもt.hourなどの名前でアクセスすべきじゃないかな
913デフォルトの名無しさん:2011/11/28(月) 13:08:11.76
だったら多少文字数が増えてもt.hourのように名前でアクセスすべきじゃないかと言いたかった
スコープに入るのがtだけという利点もある
914デフォルトの名無しさん:2011/11/28(月) 13:17:34.42
エラー処理をそういう構造に任せるなとか代入元の戻り値の整合性は別途チェックしろという考えかたもなくもなくもない
ただ、多重代入の魔境っぷりは知っておいたほうがいいとは思う
915デフォルトの名無しさん:2011/11/28(月) 17:19:33.32
>>910
名前つきキャプチャを使うと
MatchDataがHashっぽくなるよね

m = /(?<hour>\d\d):(?<min>\d\d):(?<sec>\d\d)/.match('12:44:02')
=> #<MatchData "12:44:02" hour:"12" min:"44" sec:"02">
[m[:hour], m[:min], m[:sec]]
=> ["12", "44", "02"]


余談だけど
名前つきキャプチャを使うと通常のグルーピングがキャプチャしなくなるのはダメ仕様だと思う
他の処理系や正規表現ライブラリでは名前付きでも無しでも両方有効で混在できるのに、Rubyだけ異質
916デフォルトの名無しさん:2011/11/28(月) 20:27:37.62
配列の、先頭要素以外を回すのってどういう書き方をすべきですか?
[email protected]じゃちょっと…と思うのですが
917デフォルトの名無しさん:2011/11/28(月) 20:42:07.29
@array[1..-1] とか。
918デフォルトの名無しさん:2011/11/28(月) 20:50:28.06
>>917が妥当
ちなみに「元の配列の1番目から最後まで順に取り出して配列のフリをする指示オブジェクト」を作るだけなので、効率やメモリ消費は基本劣化しない
こんなので新たに大きな配列を作るなんて、とか考える必要はないのでどんどん使え
919デフォルトの名無しさん:2011/11/28(月) 21:09:41.79
eRubyでARGV引数を取りたいときはどうすれば良いですか?

例えば、hoge.erbとして
<%= 2*ARGV[0].to_i %>
のようなファイルを用意し、
$ eruby hoge.erb 3
とすると
6
と表示するような。

環境はCentOS 5.7のeruby 1.0.5 ruby 1.8.5です
920デフォルトの名無しさん:2011/11/28(月) 21:45:36.85
>>918
日本語でおk
921デフォルトの名無しさん:2011/11/28(月) 22:57:48.85
>>920

この記法で返ってくるオブジェクトは元オブジェクトと要素メモリを共有しているので
両者の分消費されるわけではない。巨大な配列の場合も心配しなくてもよろしい。
922デフォルトの名無しさん:2011/11/29(火) 00:04:35.29
>>921
見事な通訳っぷりだけどそれはさておき

ary = [1, 2, 3]
ary2 = ary[0..-1]
ary[0] = 10
ary2 #=> [1, 2, 3]

書き換え時にコピーされるってこと?
できたらポインタちょうだい
923デフォルトの名無しさん:2011/11/29(火) 00:18:09.20
Array#slice とかの ary_make_shared() の話はけっこう有名
C のソース読んだほうが早いと思う
924デフォルトの名無しさん:2011/11/29(火) 01:03:13.40
>>923
サンクス。Cとか読み間違えるからマニュアル等に記述が欲しかったが仕方ない
array.cのrb_array_modify()あたりか

ary = [1,2,3]; ary[0..-2].each{|elem|p elem}みたいに
書き替えずに参照するだけなら元配列のコピーは起こらないって理解でいいかな
925デフォルトの名無しさん:2011/11/29(火) 03:56:36.55
>>917
あーそうか-1ってありましたね
ありがとうございます
926デフォルトの名無しさん:2011/11/29(火) 04:58:49.34
>>916
a[1..-1].to_enum
927デフォルトの名無しさん:2011/11/29(火) 11:34:40.18
Ruby内部動作は知らないが、挙動だけを見ると

配列のスライス作ったときにはコピーはおこらず
どちらかの配列が変更されたときに初めてコピーされる
でも、その共有状態を解除できない

a=Array.new(10000000)
b=a[1..-1] # スライスを作って共有状態に
b=nil #スライスへの参照をなくす(つもり)
GC.start #スライスを確実にGCしたい
a.push(0) # それでも、実際にコピーが発生してから 元配列を変更
その後、スライスから実配列になったものは、どこからも参照されてないのでGCされる
928デフォルトの名無しさん:2011/11/29(火) 11:49:35.05
エンコードについての質問です。
pattern =STDIN.gets.chomp!
regexp = Regexp.new(pattern,nil,"e")

実行するとwarning : encoding option is ignored -e
とでます。
ShiftJISにしたりしたんだけど実行出来ないです。どうしたらいいすか?
929デフォルトの名無しさん:2011/11/29(火) 12:08:28.62
お前>>235だな
930デフォルトの名無しさん:2011/11/29(火) 12:32:46.02
違うけど?
931デフォルトの名無しさん:2011/11/29(火) 12:34:19.27
Regexp.new で正規表現を作る人なんて Ruby ではいないからねえ…
932デフォルトの名無しさん:2011/11/29(火) 12:41:12.15
>>928
つリファレンスマニュアル
933デフォルトの名無しさん:2011/11/29(火) 12:55:47.07
Rubyプログラミング基礎講座
広瀬雄二著の正規表現の章のサンプルプログラムであったのですよ、、、
934デフォルトの名無しさん:2011/11/29(火) 13:17:46.02
その本は 1.8 が対象じゃない?
1.9 でそのまま動くとは限らないから 1.8 にするか、
リファレンスマニュアルにあたって仕様を確認した方が良いよ。
935デフォルトの名無しさん:2011/11/29(火) 14:55:50.12
そうだったのですか、、
他の本借りてみます。初心者にオススメの本あったら教えてください。
936デフォルトの名無しさん:2011/11/29(火) 15:06:16.64
ここは冷たいインターネッツですね
937デフォルトの名無しさん:2011/11/29(火) 15:09:04.83
>>935
Rubyクックブック。>>928からしてたぶん読める
938デフォルトの名無しさん:2011/11/29(火) 15:09:54.61
ああ間違えた。クックブックじゃなくてレシピブック(ソフトバンクから出てるほう)
939デフォルトの名無しさん:2011/11/29(火) 16:23:13.91
これ初心者向けですかー
940デフォルトの名無しさん:2011/11/29(火) 16:39:35.69
なにの初心者向けなのかはきちんとしておかないといけない
たとえばキーボード打ったことがないとか
941デフォルトの名無しさん:2011/11/29(火) 16:54:27.42
なんか if とかで分岐ができて、メソッドっていうのはなんか ドットで繋ぐやつで、
クラスはなんかドットの前にある大文字で始まるやつで、モジュールはわけわかんないからいらない、
というレベルで必要なのはレシピブックだと思う
942デフォルトの名無しさん:2011/11/29(火) 17:02:22.52
そうだな、レシピブックやクックブックの類は、なくてもできるけど、あると早い
お金払わずにこれに相当する知識とテクニックをネットと自力で勉強することはもろちんできるが、本があると10分の1くらいの時間で済む
下手すりゃ1年かけて独習したものが中途半端に古い不完全で抜けのある知識だけだったりするんだが、
これらの本があるだけでそれを越えるクオリティと量のものを1ヶ月で完全に習得できたりする

先人がRubyに関して10年近くうだうだやってきたことの集大成なので、立ち読みでもいいから素直に読め
943デフォルトの名無しさん:2011/11/29(火) 17:10:18.74
ずいぶんと大げさだなw
944デフォルトの名無しさん:2011/11/29(火) 17:29:17.98
すみません、>>919ですが、何か策はあるでしょうか?
945デフォルトの名無しさん:2011/11/29(火) 18:36:19.53
>>940
今年授業でjavaを始めて、最近rubyに手を出し始めました。かなりちんぷんかんぷんなんでrubyでちゃんと勉強しようかと思い本を手にとった次第ですね。
946デフォルトの名無しさん:2011/11/29(火) 18:44:04.32
>>944
Ruby1.8.5なんてもう誰も使ってないからフォローできない
eRubyを今さら以下略っていうかC実装で標準添付じゃないから読むのめんどい

erbのように引数をぜんぶファイル名とみなして消費する実装というのは結構あるので、コマンドラインオプションで気を遣っていなければ無理だと思う
947デフォルトの名無しさん:2011/11/29(火) 19:03:44.74
>>944
yum で入れたのだとダメみたいだね。
Subversion の最新版では対応しているので、コンパイルして試したらいけたよ。
ttp://modruby.net/ja/index.rbx/eruby/download.html
948デフォルトの名無しさん:2011/11/29(火) 19:13:10.23
>>943
大袈裟ではない
あれらの本は、(脱)初心者のレベルを容易に一定のレベルまで引き上げることができる
だからこそレシピブックやクックブックが望まれてきたんだ(PerlやPythonのようにね)

イヤな言い方だが、Ruby1.8.6黎明期に自力でやっていた人はレシピブックがなかったせいで時間を大損してるんだぞ
今の初心者はロクに苦労も時間もかけずに基本とテクニックを習得してしまってハングリー精神に欠けるとか嫉妬しても許すw
949デフォルトの名無しさん:2011/11/29(火) 19:22:34.93
今から学び始めるなら1.9に対応した書籍の方が良いですよね
まだ軽く立ち読みしたけどまだあんまり種類が無いみたいで
950デフォルトの名無しさん:2011/11/29(火) 19:31:41.04
文字エンコーディング(文字コード対応関係)に関する基礎的な知識が否応なく剥き出しで必要になるけどね1.9
まあ、1.8ではだましだましやってるってだけで早晩ブチ当たる問題なので、避けては通れないものではあるんだけど

Rubyの書籍は変なのが売れ残ってるだけだったりするので注意
わからんかったら教えたりスルーしたり煽ったり叩いたりするので聞いてみるといい
951デフォルトの名無しさん:2011/11/29(火) 19:47:42.09
>>948
おれはrubyの負の部分であると言えるpack,unpackで苦労したけどな
952デフォルトの名無しさん:2011/11/29(火) 20:32:58.22
pack,unpackはPerlで使ってたので苦労は無かったな

Pythonとか他のスクリプト言語だとどうやるんだろうか
なんか、うまいバイナリの扱い方があるのかな
953デフォルトの名無しさん:2011/11/29(火) 20:49:06.53
perl,awk系のスクリプト言語は正規表現だけはよく出来るのがその存在意義だと思うよ
954デフォルトの名無しさん:2011/11/29(火) 20:56:16.44
packとunpackこそ、Cライクインターフェースと糖衣構文の2刀で行くべきだった
なんでC風で諦めちゃったのかね
955デフォルトの名無しさん:2011/11/29(火) 21:35:43.41
>>953
もともとそれらは(そしてRubyも)テキスト処理の為に設計された言語だから、
当たり前といえば当たり前だったりする
956デフォルトの名無しさん:2011/11/30(水) 02:52:14.15
>>948
1.8.6が出たころにはレシピブックもうあったよ
うちの初版は2004年発行で1.8.1対応だ

ちなみにその初版はいまだに使えるけど
オライリーのクックブックはまったく使ってない
あの実用度は本家をしのいでる
957デフォルトの名無しさん:2011/11/30(水) 04:02:40.43
>>952
Pythonもたいしてかわらない
PerlやRubyのほうが書式文字列が充実してるけど
http://www.python.jp/doc/2.4/lib/module-struct.html

Rubyでは宣言的に書けるBinDataがなかなか便利
複雑なバイナリフォーマットになると結局pack/unpackと手続き型のお世話になるけど
http://bindata.rubyforge.org/
958デフォルトの名無しさん:2011/11/30(水) 04:06:25.92
そういえばPythonにはhachoirやconstructがあった
http://hachoir.org/index.html
http://construct.wikispaces.com
959デフォルトの名無しさん:2011/11/30(水) 15:19:22.14
>>919
> eRubyでARGV引数を取りたいときはどうすれば良いですか?
>
> 例えば、hoge.erbとして
> <%= 2*ARGV[0].to_i %>
> のようなファイルを用意し、
> $ eruby hoge.erb 3
> とすると
> 6
> と表示するような。

erbだと
erb hoge.erb 3
とやったら、「3」というファイルを探しにいってエラーになるな。

erubisだとhoge.erbを「<%= 2*@arg.to_i %>」にして
erubis -c '@arg=3' hoge.erb
とすればいけるね。
引数が複数なら erubis -c '@a=1;@b="X";@c=[true,false]' hoge.erb かな。
テンプレートにちょろっとデータを渡して実験したい場合にはそれなりに便利かな。
960デフォルトの名無しさん:2011/11/30(水) 15:23:21.73
>>959
なお
ttp://www.slideshare.net/kwatch/erubis
の14ページに詳しいことが書いてある。
961デフォルトの名無しさん:2011/11/30(水) 20:42:32.18
gemを大量に入れると(Railsではありがち)、Rubyの起動が目に見えて遅くなるんだけど、
なんか解決策ないですか。
irb起動するのにいちいち2秒〜3秒待たされてしまい、困ってます。
なおirb起動しっぱなしにすればいいというのはなしでお願いします。
962デフォルトの名無しさん:2011/11/30(水) 20:44:42.23
1.8を使う
963デフォルトの名無しさん:2011/11/30(水) 20:46:40.56
わーいエロ画像いっぱいDLするツールできた
964デフォルトの名無しさん:2011/11/30(水) 20:59:43.19
1.9.3のrequireはかなり速くなってないか?
965デフォルトの名無しさん:2011/11/30(水) 21:37:08.94
>>963
よし、おじさんにkwsk 教えてください
966デフォルトの名無しさん:2011/11/30(水) 21:44:32.60
UAをブラウザに見せかけるとか、
人間ぽく見せるためにランダムにリクエスト間隔を空けるとか、
いろいろ工夫する楽しみがある…かも。
967デフォルトの名無しさん:2011/11/30(水) 21:48:24.33
>>966
何の話?
968uy:2011/12/01(木) 03:26:05.70
誤爆だろ

誤爆、つまりミスをしても
それを伝えないで
「あ」っつってブラウザ閉じてとんずらこくカスがいるのが、このム板
969デフォルトの名無しさん:2011/12/01(木) 09:16:44.61
エロ画像DLツールの話じゃ?
970デフォルトの名無しさん:2011/12/01(木) 12:22:25.29
流れを見れば普通の人はそう思うよね
971デフォルトの名無しさん:2011/12/01(木) 12:26:35.44
まあ、そんな話されてもだから何って感じではあるけどな
972デフォルトの名無しさん:2011/12/01(木) 12:34:42.38
初めてThread使ったのはエロ画像をごっそり落とした時だな
973デフォルトの名無しさん:2011/12/01(木) 18:32:16.95
今頃で申し訳ないんだが
>>512
require File.expand_path("hoge", Flie.dirname(__FILE__))
>>468
require File.expand_path("hoge")
って普通に>>468で間違って無いと思うんだけど、File.dirname(__FILE__)がカレント(".")以外を
返すときってあるの?
974デフォルトの名無しさん:2011/12/01(木) 18:59:33.05
それがカレントに無ければそこを返すだろう
975デフォルトの名無しさん:2011/12/01(木) 19:39:25.03
. のカレントってのは、ファイルから見て、じゃなくてプロセスから見て、だ。
976デフォルトの名無しさん:2011/12/01(木) 20:43:09.70
なるほど、ファイルからだと勘違いしてた
977k:2011/12/02(金) 12:34:42.36
すみません、rubyを学んで間もない学生です。エラーを調べもわからないので質問させてください・・。
rake db:migrate
と入力しマイグレーションを実行すると、
== AddTestData: migrating ====================================================
-- product()
rake aborted!
An error has occurred, all later migrations canceled:

となって、終了してしまいます。自分は調べ方が下手なので調べ方・対策があればよろしくお願いいたします。
978デフォルトの名無しさん:2011/12/02(金) 13:56:32.67
コロンの後が重要なんだけど
979デフォルトの名無しさん:2011/12/02(金) 14:05:21.82
エラー内容も書かずに

rakeは強制終了!
エラー発生、以降のmigrationはキャンセルされました:

で何かわかると思ってるのかね。
この程度の英語も読まないならプログラミングなんてやめた方がいい。

調べ方が云々じゃなくて、エラーメッセージを読んですらいないのが丸わかり。
980k:2011/12/02(金) 14:44:03.52
大変失礼しました。
こちらがコロン後です。長いので分けていきます。

undefined method `price_must_be_at_least_a_cent' for #<Product:0x5689048>
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/attribute_methods.rb:260:in `method_missing'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:178:in `send'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:178:in `evaluate_method'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:166:in `call'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:90:in `run'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:90:in `each'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:90:in `send'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:90:in `run'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo
rt/callbacks.rb:277:in `run_callbacks'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/validations.rb:1029:in `valid_without_callbacks?'
981k:2011/12/02(金) 14:44:34.90

C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/callbacks.rb:286:in `valid?'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/validations.rb:1008:in `save_without_dirty'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/dirty.rb:79:in `save_without_transactions'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:179:in `send'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:179:in `with_transaction_returning_status'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/connection_adapters/abstract/database_statements.rb:66:in `transaction'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:129:in `transaction'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:138:in `transaction'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:178:in `with_transaction_returning_status'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:146:in `save'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:158:in `rollback_active_record_state!'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/transactions.rb:146:in `save'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/base.rb:693:in `create'
./db/migrate//20111202052032_add_test_data.rb:4:in `up_without_benchmarks'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:280:in `send'
982k:2011/12/02(金) 14:45:09.38

C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:280:in `migrate'
C:/InstantRails/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:280:in `migrate'
(__DELEGATION__):2:in `__send__'
(__DELEGATION__):2:in `migrate'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:480:in `migrate'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:556:in `call'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:556:in `ddl_transaction'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:479:in `migrate'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:466:in `each'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:466:in `migrate'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:394:in `up'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record
/migration.rb:377:in `migrate'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/tasks/databases.rake
:111
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'

C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execu
te'
983k:2011/12/02(金) 14:46:04.51
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'

C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execu
te'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invok
e_with_call_chain'
C:/InstantRails/ruby
/lib/ruby/1.8/monitor.rb:242:in `synchronize'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invok
e_with_call_chain'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invok
e'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invo
ke_task'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_
level'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each
'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_
level'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `stan
dard_exception_handling'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_
level'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
984k:2011/12/02(金) 14:47:17.20

C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `stan
dard_exception_handling'
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'

C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
C:/InstantRails/ruby/bin/rake:19:in `load'
C:/InstantRails/ruby/bin/rake:19
以上です。よろしくお願いいたします。
985デフォルトの名無しさん:2011/12/02(金) 14:52:42.96
こちらこそヨロシクお願いいたします。
986デフォルトの名無しさん:2011/12/02(金) 14:59:13.06
>>984
はい、ご苦労様、それじゃ次は>>5を読んでね。
これでこのスレでの回答はおしまい。
987デフォルトの名無しさん:2011/12/02(金) 15:00:35.70
次のちんこスレはどこだ?
988デフォルトの名無しさん:2011/12/02(金) 15:03:21.75

次 ス レ の 季 節 で す よ

989k:2011/12/02(金) 15:05:59.14
>>984さん
ありがとうございます。スレ違いでしたね。失礼しました;
拝見してきます!
990デフォルトの名無しさん:2011/12/02(金) 18:38:31.24
相澤, 20, 169, 70
竹内, 28, 173, 69

みたいなテキストファイルがあってこれを配列に格納してクラスで定義したいのですが、インスタンスの初期化はどこでしたらいいのですか?
new_array =[]
while input_line =gets
new_array <<Person.new(input_line)
end
格納はこんな感じになると思うのですが、初期化するときの引数はinput_lineで大丈夫ですか?

991デフォルトの名無しさん:2011/12/02(金) 18:43:27.24
それだとカンマ区切りテキストでしかPersonを生成できないので
name, age, height, weight = line.chomp.split(/,\s+/)
new_array << Person.new(name, age, height, weight)みたいにする

だれか次すれを
992デフォルトの名無しさん:2011/12/02(金) 18:46:20.89
ああ、line.chomp.split(/,\s*/).map{|e|e.to_i} で
スレ立ていってきます
993デフォルトの名無しさん:2011/12/02(金) 18:53:53.76
次スレが立ったよ。なかよくつかってね

Ruby 初心者スレッド Part 47
http://hibari.2ch.net/test/read.cgi/tech/1322819329/
994デフォルトの名無しさん:2011/12/02(金) 19:29:03.80
>>991
テキストファイルは実際はもっとデータがあるので格納の際は一行丸ごと読み込みたいのですが、、
格納のやり方は上記のものとして、初期化はどうやったらいいですか?要素番号を用いる感じでいいのでしょうか。
995デフォルトの名無しさん:2011/12/02(金) 19:31:32.94
あれ、むりか
996デフォルトの名無しさん:2011/12/02(金) 20:15:45.26
>>994
よくわからないけど、こんな感じ?

class Person
  def initialize(name, age, height, weight); ... ; end
end

ary = ['相澤', 20, 169, 70] # getsしたlineを加工したもの
Person.new(*ary)
997デフォルトの名無しさん:2011/12/02(金) 23:17:15.66
      ,--――--、
     /,""^" ̄゛゛、ヽ
     ',l -‐'  ー- "、|
     〔::::::〕‐〔:::::::〕‐b)
   __|  ,(__)、  |"__    いいかお前ら、ちゃんと(次スレの)コンセンサスを得ろよ
  /  _ ヽ、_=__/ _  \  じゃないと俺は何もしないからな
 ∧_/ / lVヽ ̄/V/ /  \/ヽ
 ヽ'  / /  l/ / /
998デフォルトの名無しさん:2011/12/03(土) 00:12:43.47
999デフォルトの名無しさん:2011/12/03(土) 00:12:55.11
1000デフォルトの名無しさん:2011/12/03(土) 00:13:27.53
おつかれちゃん
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。