1 :デフォルトの名無しさん2011/10/05(水) 13:52:00.74
プログラミング言語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/
3 :デフォルトの名無しさん2011/10/05(水) 15:03:59.61
>>1
おつ!
4 :デフォルトの名無しさん2011/10/05(水) 15:28:39.77
>>1
16 :デフォルトの名無しさん2011/10/06(木) 18:46:41.62
>>10
本来は>>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

このデバッグプリント関数なんとかラップできないですか
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は何の意味がありこれを書くことによってどのようなことが行われるのでしょうか?
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を渡さないとならん
22 :デフォルトの名無しさん2011/10/07(金) 19:56:00.17
irb> puts "ねここ".chomp("こ")
ねこ
31 :デフォルトの名無しさん2011/10/08(土) 10:43:49.08
>>29-30
実際に使われている用法がどう、という話ではない
メソッドの定義と記憶法の話
「chompは文字列末尾に改行があれば取り除く」と覚えていた場合、5分で>>22はまず出てこない
これは明らかに「String#chompは引数文字列(がなければ改行)を末尾から取り除く」と記憶していたということだろう
そして、たぶん、そのほんのちょっとの手間で大幅に融通がきく

String#subと正規表現使うほうが汎用的でなおかつ生まれて初めて見るchompの引数つき動作なんかより一般に一発で理解されるんじゃねーかとかいう話は
めんどくさい比較になるので今回はしないw
23 :デフォルトの名無しさん2011/10/07(金) 20:00:06.70
こんなにも…あっさり…
検索しながら1時間以上悩んでたのが馬鹿みたいでした。
どうもありがとうございます。
24 :デフォルトの名無しさん2011/10/07(金) 20:08:29.11
結構トリッキーじゃね?
"こ"を改行とみなして取り除くって
26 :デフォルトの名無しさん2011/10/07(金) 20:22:30.74
>>24
違う
String#chomp は引数文字列を末尾から取り除いて新しい文字列を返す(末尾が該当しなければ、なにもしない)というメソッド
引数が無かった場合、$/ を取り除こうとする
さらに、$/ がデフォルトの $/ と同様だった場合には、特別に \n と \r と \r\n の3種類を対象とする

perl の chomp とはコンセプトからして既に別物
28 :デフォルトの名無しさん2011/10/07(金) 21:03:53.86
>>26
そうなのか
またるりまに騙されたぜ
29 :デフォルトの名無しさん2011/10/07(金) 21:07:44.33
9割以上が、引数付けないで、改行を削除するのに使ってると思うけど
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]

36 :デフォルトの名無しさん2011/10/08(土) 12:33:48.49
>>34
依存してるのなら残しておいたらいいじゃまいか
>= 0.8.7は0.8.7以上
~> 0.8.7は0.8.7以上0.9未満
35 :デフォルトの名無しさん2011/10/08(土) 12:28:05.76
根本的には該当ライブラリ本体を対象gemで動作するように書き換えるしかない
バージョン番号さえ書き換えれば動くということがわかっているのならredcloth.gemspecのバージョン番号を書き換えればいい

でもたぶん動かないと思う
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 をダブルクリックなんて普通はしない
44 :デフォルトの名無しさん2011/10/11(火) 12:23:18.93
>>38
文字コードのそれぞれの対応文字も理解していないと厳しいのですね。
なぜかUTF-8では殆どの日本語が使えるイメージでしたが
'.encode('Windows-31J')をしないと駄目という事で、なるべく日本語は使わない方向で頑張ってみます。

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

ただ、これでないと駄目っていう文字コードが無い事をしれて良かったです。
ゆっくりになりますが、少しずつ文字コードを学んでいきたいと思います。
ご丁寧にありがとうございました。
41 :デフォルトの名無しさん2011/10/11(火) 11:21:25.71
いやいや、ずっと前に作ってあるのに取り込まれてないでしょ
45 :デフォルトの名無しさん2011/10/11(火) 12:31:19.78
nanocとかJekyllみたいな静的サイト作るものを探しているんですが
ruby1.9.2(+windows)での使用感などの情報がまとまってるとこ知りませんか
49 :デフォルトの名無しさん2011/10/11(火) 13:24:48.87
>>45
nanocとかには興味はあるんだけど、日本語リソースは見たことがないな
自分で使うしかあるまい
52 :デフォルトの名無しさん2011/10/11(火) 17:13:00.24
>>49
個人ブログで数件だけですねnanoc
Getting Startedしかやってないけどよさげではある

1.9.2だとなぜかcompile遅いのが気になるけど
他のドキュメント読みつつやってみます
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
わざわざありがとうございます。そのようにしていこうと思います。
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はそもそも使わないと思うなあ
53 :デフォルトの名無しさん2011/10/11(火) 17:27:46.80
-Ecp932:utf-8だけで済むなら楽なんだけど
波ダッシュとかあるしねえ
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
58 :デフォルトの名無しさん2011/10/11(火) 22:52:35.94
>>56,57
ありがとうございます
では配列にeach_line的なこと(C#のforeach?)をするにはどうするんでしょう?

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

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

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

@header = ....

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

=>
66 :uy2011/10/12(水) 01:56:41.56
>>63
俺から言わせればゴミ

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

素の文法レベルならともかく、第三者ライブラリ挟んだ時点で直感的もなんもないと思うけどな
68 :uy2011/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]
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!と末尾の!の意味がわかりません
教えてください
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
74 :デフォルトの名無しさん2011/10/12(水) 14:59:31.71
windows使ってたらchmが便利だから、↓からrubymanjp_20070802.zipっての落として使うといいよ
http://rubyforge.org/frs/?group_id=3959
77 :デフォルトの名無しさん2011/10/12(水) 16:25:40.18
>>75-76
ありがとうございました

>>74
どこに入れればいいんでしょう?
表示されませんでしたorz
80 :デフォルトの名無しさん2011/10/12(水) 18:15:06.73
>>77
ファイル右クリック=>プロパティ=>ブロックの解除
かな
92 :デフォルトの名無しさん2011/10/12(水) 20:47:23.52
>>80
ありがとうございます、見れました
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}
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 ってどういう挙動になるの?
89 :デフォルトの名無しさん2011/10/12(水) 19:28:27.41
>>87
気づいたみたいだけど、単にキーと値の配列で比較されるはず

81 :デフォルトの名無しさん2011/10/12(水) 18:33:59.66
select 厨がまた出たか
Ruby ではおおむね find_all のほうを使う
select と reject と detect と collect と inject がすべて同じ言語のコレクションオブジェクトにあって
使い分けしなければならないというのは初心者には酷だ
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汎用なのに。
88 :872011/10/12(水) 19:23:48.66
あ、 [i.score, score] が最小のものが選ばれるので、
実質的には i.score 最小のものが選ばれる、ということかな。
90 :デフォルトの名無しさん2011/10/12(水) 19:30:05.10
自分で言ってるけど、Enumerable を include したオブジェクトの each メソッドに対する単一のブロック引数がなにになるかによる
{'k1' => 'v1'}.each{|e| p e} は ['k1', 'v1'] を表示するので、Hash の min はこの要素2の配列に対して <=> を試した結果だね
91 :872011/10/12(水) 19:38:33.10
ああなるほど、そのコレクションの each の実装によるのね。納得。
93 :782011/10/12(水) 23:19:00.56
ありがとうです
group_byはおもしろいと思いました
最近のバージョンで搭載されたヤツですね
直感的にはselectかfind_allを使うほうがわかりやすいのかな
94 :uy2011/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
とかでてくるわけなの?
98 :デフォルトの名無しさん2011/10/13(木) 19:15:12.58
>>94
(0 ... 3).each do |i|
でいいだろ
153 :uy2011/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|
こうだと思う
95 :デフォルトの名無しさん2011/10/13(木) 13:30:08.68
> for 0..3 do | i |

これがRubyらしいとか笑えるw
99 :デフォルトの名無しさん2011/10/13(木) 23:20:09.50
見えない人と会話しないでくらさい><;
100 :482011/10/13(木) 23:44:41.25
>>99も又、さっきまで見えてなかった。
という訳で、99は再帰からの脱出条件を書くように。
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 とやらで書くほうがトレンドなんですかね?
134 :デフォルトの名無しさん2011/10/16(日) 09:56:22.42
>レスが無かったのは自分で答書いてるからに過ぎない
うむ
>>104書いておきながらまさかそれで止めるとは思わなんだ
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+ への投稿) 。

長らく闘病中だったとのことで、先週末に自宅で息を引き取ったそうだ。
107 :デフォルトの名無しさん2011/10/15(土) 00:25:57.78
rubyは学習し始めたばかりなんですが公式マニュアルみてもどうやってライブラリを使っていいのかわかりません
PHPのマニュアルみたいにサンプル付きで書かれていればわかりやすいのですが
Rubyで逆引きサンプル本みたいなのございませんか?
109 :デフォルトの名無しさん2011/10/15(土) 00:46:04.82
メソッドのサンプルそのものはついてるんだけどね
初心者向け記述をなくすことで効率上げてるんだけど、初心者向け記述がないので初心者は読めない
プログラミング言語マニュアルとして正しい方向性のひとつではあるが
110 :デフォルトの名無しさん2011/10/15(土) 11:04:19.80
空きポートのリストを知りたいと思っています。
netstatコマンドのような情報を取ってくる事ができるとベストなのですが
いい方法はありますでしょうか?
112 :1102011/10/15(土) 12:12:30.48
レスありがとう。
クロスプラットフォームなライブラリがあったらなぁと思ったのですが
やっぱ無いのかな
113 :デフォルトの名無しさん2011/10/15(土) 12:58:02.17
一瞬「おっ」と思ったけど、/proc fs前提だから移植性に乏しいな。
https://github.com/agoddard/ruby-netstat
115 :デフォルトの名無しさん2011/10/15(土) 23:27:35.98
foreachに相当する書き方と
for(var i =10; i>0; i--)に相当する書き方を伝授してください
117 :デフォルトの名無しさん2011/10/16(日) 00:25:30.00
独特すぎて難しいですね
何でforeachと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
とか書く
119 :デフォルトの名無しさん2011/10/16(日) 00:37:17.38
Rubyのforはあまりにも使わないので「こうだったかな」と
資料を確認したりirbで動かしたりしてみないと書けない。
122 :デフォルトの名無しさん2011/10/16(日) 04:29:16.85
Iterationを枚挙って表現する奴はじめて見たww
124 :デフォルトの名無しさん2011/10/16(日) 04:35:25.10
>>122
横レスだが、iterateを枚挙でenumurateを列挙と訳すのは普通じゃないのかと....
じゃあ>>122はiterateを「自分の言葉」でどう訳す?

# 予想されるレス:iterateはイテレート、馬鹿じゃねーのww
126 :デフォルトの名無しさん2011/10/16(日) 06:20:02.44
×みたいな特殊文字全部をデコードしたいんだけど1文字ずつ自分でやるしかない?
& > < "だけならunescapseHTMLでできたが
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は、
・使い捨てスクリプトを書くのが関の山
・大規模開発では実用にならない
・玩具レベル、趣味で使う言語
なのですかね…
まあ、そういうのも嫌いじゃないけど…
132 :デフォルトの名無しさん2011/10/16(日) 09:52:05.77
>>130
>結局、RDocの書き方については何のレスも貰えず
そんなものがあったら代替議論なんて出ずにRDocが今も使われていただろうね
なかったからこそ、プログラマブルなドキュメントとしてのRDocは終焉を迎えている
あと、レスが無かったのは自分で答書いてるからに過ぎない
136 :デフォルトの名無しさん2011/10/16(日) 10:03:00.42
>>132
yardがトレンドなら「そうだよ。yard使えや」と一言レスつけてくれれば済む話じゃないですか…
誰も書かない=誰も知らないし分からないのだな、としか捉えようがないですよ…

でもまあ何にせよ、RDocだけじゃ厳しいという共通認識だったのですね
納得できました
あとは…Netbeans上でyardと連携できるかどうかを今後調べてみます
助言ありがとうございます
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が責任を持つプロジェクトで、どこまで「文書化を重視」するかにかかっている、と思う
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やってないのはよくわかった
133 :デフォルトの名無しさん2011/10/16(日) 09:53:04.93
> 大規模開発では実用にならない
開発するだけなら使えるよ。その後はいろいろ地獄だけど。
137 :デフォルトの名無しさん2011/10/16(日) 10:05:19.34
トレンドでもなんでもない
実質上の唯一解であるというだけで、特段勧めるものでもない
おなたが求めるものはおそらくJavaで、それはおそらくJavaにしかない
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
142 :デフォルトの名無しさん2011/10/16(日) 11:32:05.74
>>140
そのスレのは2年くらい前の認識で、
それから2年経って今は自力でコメント部分にタグ書いてHTMLマニュアルとしてきれいに出力することまではできてる
あと2年くらい経てばメソッド定義の引数とかから遡ってある程度テンプレートコメントが自動で作成されるようになるかもしれないし、
さらに2年くらい経てば他のプログラムとの連携もどうにかなるかもしれない
どっすか開発参加
138 :デフォルトの名無しさん2011/10/16(日) 10:08:25.72
そもそもIDE上でRubyスクリプト書いてる人がまずいないしな
連携が当たり前のようにどうこう言われてもわりと困る
141 :デフォルトの名無しさん2011/10/16(日) 10:57:15.03
windowsでコンソールプログラムを最小化すると タスクバーにプログラムのウィンドウタイトル(じっさいには プログラムのパス)が表示されますが
このウィンドウタイトルを設定する方法はございませんか?
ttp://www.texcell.co.jp/ruby/winconsole/winconsole.htmlで配布されているライブラリのsetConsoleTitleでできそうな気もしますが
ライブラリを使わないで設定する方法はございませんか?
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')
149 :デフォルトの名無しさん2011/10/16(日) 16:39:31.23
>>144
横からすまん
コード試したけど動かなかった
1.9.2

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

>>149
1.9.2だと文字コードエラーか
先頭にマジックコメント
#coding:cp932
とかを追加すると動くはず
160 :1492011/10/16(日) 18:36:43.45
>>150
'title hello'これすげえ
でも実行したら管理者: helloって表示された
Win32APIからだと管理者が表示されなかったから使い分けるのがいいのかな?

>>151
追加したら動いた
素晴らしい
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するしかない
150 :デフォルトの名無しさん2011/10/16(日) 16:44:28.86
`title hello`
でいいんでね
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を押して終了させたときにエラーが出ないようにする方法はございますか?
161 :デフォルトの名無しさん2011/10/16(日) 18:48:25.98
>>159
それエラーじゃないよ
163 :デフォルトの名無しさん2011/10/16(日) 18:52:00.84
>>161
これがでないようにするにはどうしたらよいですか?
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
すごいありがとうがいます!
184 :デフォルトの名無しさん2011/10/16(日) 23:53:17.24
>>165
そんなんでいいのか

Signal.trap(:INT){$stderr.puts "Interrupt!";exit(1)}
sleep 10
などと
シグナルトラップしないと駄目だと思ってた
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を検知したい理由や押すときの状況なんかを詳しく書くといいかも
162 :デフォルトの名無しさん2011/10/16(日) 18:51:03.25
>> require 'active_support/all'
>> (1.year / 1.day).days
=> 365.25 days

その端数をキープするなら 365.2422 くらいまで追求しろ、と思ってしまう。
167 :デフォルトの名無しさん2011/10/16(日) 20:32:11.85
なんで |a| みたいな書き方するんでしょうか?
どんな利点があるんですか?
168 :デフォルトの名無しさん2011/10/16(日) 20:44:59.11
その記法はSmalltalk由来。それを受け継ぐRubyは由緒ただしいオブジェクト指向、とか悦に入ることができる。
明確な利点はないので、とりあえず気持ちいいとかわかりやすいか直感的とか言っとけばよい。
172 :デフォルトの名無しさん2011/10/16(日) 21:13:20.24
>>168
直感的ってそれだけの理由だったのか・・・orz
他言語触ってた俺からしたら気持ち悪さ満点やわ
178 :デフォルトの名無しさん2011/10/16(日) 22:07:00.87
>>168
Smalltalkで |a| は(Rubyにはない)テンポラリ変数宣言だから関係ないでしょ。
ブロック引数も [:a | a+3](Rubyの { |a| a+3 } に相当) みたいに縦棒は使うけどかなり違うし。
それとも、MatzがSmalltalkをよく知らずに勘違いして猿まねしたとか?
169 :デフォルトの名無しさん2011/10/16(日) 21:01:28.58
100/7みたいな計算式で小数点が発生するようなケースのときに自動的に小数点が削られるのは仕様ですか?
やりたいこととしてはJavaScriptのMath.floorで小数点を削った値が欲しいので勝手に削ってくれるのは嬉しいのですが
Rubyのバージョンによってこの挙動が違ったりしますか?
170 :デフォルトの名無しさん2011/10/16(日) 21:08:57.52
整数同士の計算は常に整数を返します
整数オブジェクトのメソッドは整数を返すという以上の深い意味はないです
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を使って画面制御するという方法もある
177 :デフォルトの名無しさん2011/10/16(日) 21:50:45.20
\r便利ですねこんな裏技があるなんて知りませんでした
\rって改行なのにこれで消えるなんて不思議ですね
>>174さんと175さんのも知識として調べてみます
176 :デフォルトの名無しさん2011/10/16(日) 21:39:16.43
clsはWindowsのcmd.exeのコマンドじゃまいか
一行だけクリアすればいいのなら

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

とかできるけど、数行とかそれ以上のことがしたいなら
Ruby向けのライブラリを探すかWindowsのコンソール用のAPIを
使うはめになるんじゃないだろうか
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がそういう”機能”を持っているんではなく
本来はそういう意味というだけ
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
とかできないの?
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な初心者が目を回すのでそのへんでひとつ
192 :デフォルトの名無しさん2011/10/17(月) 01:45:47.48
>>190
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
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のドキュメントに関しては相当きっちりしてる
読むやつなんて少数派だろうけど
200 :デフォルトの名無しさん2011/10/17(月) 20:08:28.32
>>198
だから、メソッドやクラスの使い方を文章で書いてあることを求めてるんじゃないんだよ
201 :デフォルトの名無しさん2011/10/17(月) 20:19:40.75
必要なこと書かないで察してほしいとか思うのは、
ある種の病気だよ
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などのライブラリで、ユーザー入力を解釈したデータ置き場が必要です
ディレクトリ指定をどこにするのがいいんでしょうか? そもそもなにで設定させるべきですか?
210 :デフォルトの名無しさん2011/10/19(水) 13:08:28.28
>>208
ライブラリでどうしても必要なら
Hoge.dir = '/hoge/hoge'
とかクラスのメソッドで指定した場合だけそこに書くようにすればいいんじゃね
設定ファイルを置いたりはアプリケーション側のことだと思うし

209 :デフォルトの名無しさん2011/10/19(水) 09:37:31.71
>ディレクトリ指定をどこにするのがいいんでしょうか?
現状、特にはないので、ユーザーの指定がなければ動作しないようにするべき(またはTEMPに作っておく)
ホームやカレントに .ライブラリ名/ とか勝手に掘ってそのままにするライブラリがたまにあるんだけど、超迷惑

>そもそもなにで設定させるべきですか?
メソッド引数でファイルパスを指定
メソッド引数で設定ファイルのファイルパスを指定
またはコマンド引数で上記と同じようなことを制御
のどれか
これまたたまーに、~/.ライブラリ名rc の存在を仮定したり勝手に作ったりするライブラリがあるんだけど、果てしなく迷惑
211 :デフォルトの名無しさん2011/10/19(水) 14:08:24.01
単なる「便利な」データファイル置き場もないんだよな
gemのディレクトリにdataディレクトリ作ったら怒られるよねやっぱ
212 :デフォルトの名無しさん2011/10/19(水) 14:21:05.18
ほかのパッケージ管理システムにはそういうの用意されてるもんなの?
214 :デフォルトの名無しさん2011/10/19(水) 15:09:10.54
>>212
そこはパッケージ管理システムの責務ではなくて、個々のライブラリがなんとかする問題じゃないかな
213 :uy2011/10/19(水) 14:24:53.47
ためしに片っ端からgemインストールしてみると
トップディレクトリにすげー数のゴミフォルダが作られてるのな
a とか b とかだよ c d f temp tmp ttt xxxxdf ggrinjeaftwau3ft4uehugekzvdxgomihasinererwhgbvv

ゴミみたいな奴が作ったライブラリなんだと思う
215 :uy2011/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冊の技術書を読んでスペルインターセプトできるようになるのが夢
好きな語尾は「 ――だよ? 」 と 「 ――みさかはみさかは 」 です

pt_charat2@yahoo.co.jp
22♂です
メールまってます

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

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

スレ汚し、失礼しました
219 :uy2011/10/19(水) 18:47:50.68
>>217
何それ?? 気に入っちゃってんの??
その程度の書き込みに芸術性を見てしまう程なの?
こいつヴィオラすら弾けないんだろうな・・・・・
223 :デフォルトの名無しさん2011/10/19(水) 21:32:38.38
>>219
おまえみたいなクソのせいでVPS置いてるネットワークごと規制されたりするんだぞ
やめろ
218 :uy2011/10/19(水) 18:45:31.57
へーぼくだけなんですか
FOXはゴミッカス野朗ですね
正直イマドキ2chなんてなくても困らないんで別にいいんで
時期がきたら潰しますよ
まあしいていうならニュー速VIPがなくなるのは残念なんですけどね
ああいう場というのはなかなかネット上に出現しないカテゴリーです
けれど解除しないつもりならいたし方ありません
ぼくは2chの敵になるしかありません
224 :デフォルトの名無しさん2011/10/20(木) 01:40:39.89
たのむからアレと会話しないで
お願いだから
心の底からお願いだから
226 :デフォルトの名無しさん2011/10/20(木) 07:04:28.06
uyとかいうゴミクズをどうにかする方法はないでしょうか?
227 :デフォルトの名無しさん2011/10/20(木) 09:14:10.24
>>226
参照しないこと
参照する限りGCの対象にならない
229 :sage2011/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
%>

そもそもこういった事は出来ないのでしょうかアドバイスお願いします
231 :デフォルトの名無しさん2011/10/20(木) 14:55:26.62
>>229
ARGV << "" # 空文字列を追加
require 'cgi'
cgi = CGI.new
...
でどうでしょうか。
232 :uy2011/10/20(木) 17:32:01.34
>>231
ハァ?????????
どう考えてもセキュリティホール
>["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
]
233 :2292011/10/20(木) 17:36:57.95
>>231
ありがとうございます。
試してみましたが、offline modeで止まる事はなくなりました。
ただクエリパラメータとして取得できない状態です。
str = cgi.params["str"]
でも
str = cgi["str"]
でもダメです。
238 :デフォルトの名無しさん2011/10/20(木) 22:35:56.37
HTTPServer.new(:port => 3000)でbindできないって怒られてる間に
素敵な回答がついてたでござる

>>229
もはや蛇足だけど.erb側のコード
<%= query %>
<%= meta_vars %>
<%= query['str'] %>
230 :uy2011/10/20(木) 11:55:20.92

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

<%= str %>

<%= "gomi ha sine" %>
234 :uy2011/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}を使って繰り返す方法を教えて下さい。
お願いします
237 :デフォルトの名無しさん2011/10/20(木) 22:14:24.47
>>229
CGI 関係はばっさりカットして
str = query['str']

>>235
()や空白を削除してからじゃあかんの?
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
244 :デフォルトの名無しさん2011/10/22(土) 01:03:11.90
>>242
puts (0...n).reduce do|sum, i|
とか書いてたから、ブロックがputsの引数になってしまってたのかも
243 :2292011/10/21(金) 18:06:01.41
遅くなりましたが
str = query['str'] で出来ました!
ありがとうございます。エスケープもするようにします!
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人

あれはそもそもかなり適当で、厳密にカウントする方法というのはない
249 :uy2011/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がセットアップされていることが前提になってしまう
260 :uy2011/10/22(土) 18:43:55.74
>>250
はっあああああ???
ググレカス
http://www.moongift.jp/2011/01/20110107/
252 :デフォルトの名無しさん2011/10/22(土) 15:33:28.07
JSでRuby実装すればいいんだろ
簡単じゃん
253 :デフォルトの名無しさん2011/10/22(土) 15:35:33.54
Rubyの実装がまた1つ増えるのかw
258 :uy2011/10/22(土) 18:36:44.79
>>252>>253
ハァ??????????????
とっくにあるっていう
IronRubyと一緒にリリースされてるだろうカスが ゴミカスが 情弱が
254 :デフォルトの名無しさん2011/10/22(土) 15:37:07.70
JSで動くRuby環境をセットアップする必要があるのだが
255 :デフォルトの名無しさん2011/10/22(土) 15:39:16.18
>>254
きっと、1つのファイルにRuby実装と、それを使ったコードをまるごと書くんだよ

…重いだろうけどなw
259 :uy2011/10/22(土) 18:41:26.24
>>255
はあああ???
Ruby実装だけ別ファイルにしてクライアントのキャッシュに入れとくに決まってんだろ
  マ ジ で ア レ な の か ?

重いことにはかわりないけれど
1つのファイルにかかなきゃいけないって発想がどこからきたんだ?
JabaSkriputのかわりぬRubyつかおうってながれだってあるのに それすらしないのか??
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
おっと、インタプリタじゃない、コンパイラ(トランスレータ)だった。
261 :uy2011/10/22(土) 18:48:16.60
>>254
なんでたかがDLさせる程度の作業に「セットアップ」なんていう
キリッ!!っとした単語使うの?
こういうなんでもないところで使われると、別のもっと使うべき箇所で混乱の元になるんだけど?
はあ??

>>257
お前もだよ
機械語を生成しない実装を、コンパイラとか呼ばれると情報探そうとしたときにすげー困るんだけど????
っはっぁ???
262 :デフォルトの名無しさん2011/10/22(土) 19:22:15.42
uyちゃんは珍回答した翌日よく壊れるな
268 :uy2011/10/23(日) 21:41:22.44
>>262
俺は触ったことのないものでもある程度はレスが出来る
CGI.newは普通のオブジェクトnewとは少し違う可能性が高く
eval内で動作させるのは厳しいものと考えた
なので今回のはRuby側がerbの時にCGI.new以外で、クエリパラメータ情報を
どこかにちゃんと保持してるかが問題だった
ちゃんと作られているようで安心した
270 :デフォルトの名無しさん2011/10/23(日) 22:23:06.81
>>268
あえて一言だけね
上のはWebrickのErbHandlerの問題
274 :uy2011/10/24(月) 01:11:35.82
>>270
実装上の問題を指摘してんの?
ちゃんと作る気があるならできるとは思うが
面倒な事になるのが分かるから、別に妥協していいんじゃねと思ってる
cgiは.cgiでやれって感じだし
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です
265 :2642011/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]
269 :デフォルトの名無しさん2011/10/23(日) 21:59:16.96
Ruby1.8でTimeから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
275 :2692011/10/24(月) 06:02:26.13
レスありがとうございます

>>273さんのを参考にして上手く行きました
Timeだと閏秒?で誤差が出るのかずれるんですね・・・
271 :デフォルトの名無しさん2011/10/23(日) 23:06:39.37
そのものはない
あれはExcelの計算用の値だから、欲しいなら自分で計算するしかない

通常はそれに類するものを必要とすることはないはず
使用法が間違ってる可能性が大なので、そもそも何をしたいかを言うとなんとかなるかも
272 :デフォルトの名無しさん2011/10/23(日) 23:12:35.95
またタイムスパンの話になるに3000点
Excelでシリアル値意識するといったら時間間隔計算くらいしかねえ
277 :デフォルトの名無しさん2011/10/24(月) 14:33:23.22
UTC+7の時刻を表示する方法を伝授してください
287 :デフォルトの名無しさん2011/10/24(月) 21:47:02.04
>>277

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

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

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として扱いたいだけで,不正な文字があるならその部分は消えてもいいのですが,どうするのがいいですか?


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: '')
=> "あいうえお"
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;みたいなの
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]
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
マニュアル、前の方がよかったなあ。
見やすさという点では、ずっとよかった。

今のマニュアルだと、もはやメソッドを探せないよ。
メソッド名は元から知ってて、細かい挙動を知りたい人向けだと思う。
302 :uy2011/10/26(水) 02:44:42.04
>>294-296
マジで同意

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

あとは目次をさっさと、アルファベット順じゃなくて
機能別順にツリーで並べて一行で縦長にしとけと
アルファベット順で調べたいと思うことなんて早々ねえんだよks
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

のやうに記述する
303 :デフォルトの名無しさん2011/10/26(水) 08:32:37.16
てか何故青基調なんだろ
それじゃサファイアじゃん
305 :デフォルトの名無しさん2011/10/26(水) 08:51:01.50
>>303
ごめんなさい
304 :デフォルトの名無しさん2011/10/26(水) 08:35:52.60
隔離スレ池
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

このへん?
たぶん他にもあると思う。
322 :デフォルトの名無しさん2011/10/26(水) 22:42:48.41
>>311さんの3番目のようなものです
327 :デフォルトの名無しさん2011/10/27(木) 03:27:27.87
>サーバに投稿するものではなくオンラインで実行できるだけ

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

JavaScriptで実装したRubyは適当にググっただけでもいくつか見つかるけど
どれも数年前に開発が止まってた。
jslinuxでruby 1.8を動かした人もいたと思う。
lleval(>>311の三番目)はサーバーと通信するタイプだがAPIも公開してる。
329 :デフォルトの名無しさん2011/10/27(木) 10:39:47.47
>>311さんのみありがとうございました
見つかりました
http://repl.it/
312 :デフォルトの名無しさん2011/10/26(水) 14:53:50.93
例えばhttp://code.google.com/apis/ajax/playground/みたいなのです
codepadやideoneのようにコードをサーバに投稿するものではなくオンラインで実行できるだけのものを探しております
3番目のようなものでこれのコードの結果だけを返してくれるものございませんか?
325 :デフォルトの名無しさん2011/10/26(水) 23:41:24.57
それについては>>312のとおりです
313 :デフォルトの名無しさん2011/10/26(水) 18:16:40.29
そんな怖いサービスはない
具体的に何をしたいのか言え

$SAFEがもうちょっとマシならもしかしたら何年かあとにはあるかもしれないが、
どちらにしてもできることは極めて限られるだろう
315 :デフォルトの名無しさん2011/10/26(水) 19:15:00.89
何年もかけて$SAFEがこれだという表現のほうが適切かと思う
こういうのはふつうは「企画倒れ」とかなんとか呼ぶ
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動かしたいってこと?
それとも、サーバ上でコンソール向けスクリプト実行して
結果を返して欲しいの?
323 :デフォルトの名無しさん2011/10/26(水) 22:57:50.89
じゃあその3番目を使えばいいと思うんだけど、
もしかして自分が借りてるサーバなどで動かしたいということ?
326 :uy2011/10/27(木) 01:52:46.71
質問者とブラウザーのことはさておいといて
お前ら理解力なさすぎ

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


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

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

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


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


つまり、何が言いたいかというと、codepadで我慢しろ
328 :デフォルトの名無しさん2011/10/27(木) 10:37:54.59
いやだからその実行するものはRubyでなくてもいいんですよ
もういいです
330 :デフォルトの名無しさん2011/10/27(木) 11:29:30.33
> いやだからその実行するものはRubyでなくてもいいんですよ

一番重要な情報を最後に出すなボケカス。
それを改めない限り二度とネット掲示板で質問するな。言語の種類関係なく。
333 :デフォルトの名無しさん2011/10/27(木) 12:41:07.71
そういうサービスを知ってるものとしては分るけど>>327とか>>330のような使ったことない人には何言ってるかわからないんだろう
334 :デフォルトの名無しさん2011/10/27(木) 12:57:14.52
俺はブラウザーのことならなにからなにまで知ってるぜ。
336 :デフォルトの名無しさん2011/10/27(木) 15:01:20.92
>>334
>なにからなにまで知ってるぜ。

"なに" - "なに" = ゼロ
342 :uy2011/10/27(木) 23:46:05.22
>>334
ActivXってそれをインストールすると
ページにアクセスした時点でクライアント側のexeを実行させたりする事も可能になってるようなんですけど(ハンゲームとか)
これは、仮に正規のページ以外から任意のexe実行させたりされる可能性があると思うんですけどどうなの?
そこら辺ってURLか、何らかのパスワード的なものでチェックかけてんだと思うけど、偽装される可能性は?
cmd起動出来るならなんでもやられちゃうと思うんだけど?
335 :デフォルトの名無しさん2011/10/27(木) 13:05:06.04
概念があいまいだからか、
言葉もあいまいで不正確だから誤解を招く
337 :デフォルトの名無しさん2011/10/27(木) 15:09:12.14
この場合、

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

と考える方が妥当では
343 :3002011/10/29(土) 09:55:01.08
>> 301
報告遅れてすいません
うまく動きました!
344 :デフォルトの名無しさん2011/10/29(土) 13:42:41.78
このスレって著名なブロガーとか技術者とかRubyの開発者も見てるよね
たまにしょぼい回答者もちらほらみかけるが全体的に回答者(ほとんど数名の方が回答しまくってるのかもしれないが)の質が高いよここ
351 :uy2011/10/30(日) 01:54:57.76
>>344
開発者気取りの成りすましレスなら見たことある
2chにしてはマシってだけで、まだ全然低いだろ 贅沢? 俺は贅沢だ
確かに少しググった程度じゃ「今は」見つからない情報っていうのはあるけど、
それは1年前や3年前のGoogleだったら検索に引っかかりやすかった可能性はあるのでなんとも
あとは英語版Googleとか Google SorceCodeSearchだな

あと、スレ盛り上げる為か何か知らないけど
自分で質問して自分で回答してる奴がいるのもわかってるからね?
あえてスルーしてあげてるだけだからね?
uyのネット匿名カテゴリにおけるinsightをあまりなめてはいけない
345 :デフォルトの名無しさん2011/10/29(土) 13:55:12.73
ひとりかふたりレベルの違う人がいるね
ちょっとググったぐらいじゃ答えられない質問になると答えてる
いつもほんの数行だし記名性のない文章だから気付きにくいけど
350 :デフォルトの名無しさん2011/10/29(土) 23:08:01.81
windowsのコマンドラインから実行したとき、ctrl+zが押されたときに特定の処理をやりたいのですが
押されたか知る方法はございませんか?
355 :デフォルトの名無しさん2011/10/30(日) 08:41:06.48
def fact(n)
n == 1 ? n : n * fact(n - 1)
end

p fact(8188)

rubyってどこまでデカイ数扱えるのかなと思って試してみた
8188までいけた、これよりデカイ数を求めたくなった場合はどうしたらいいの?
357 :デフォルトの名無しさん2011/10/30(日) 09:36:08.85
>>355
再帰だとスタック食い潰しちゃうから再帰を使わずに書く
370 :デフォルトの名無しさん2011/10/30(日) 11:47:02.09
>>355
↓こういうやり方もあるね。
http://d.hatena.ne.jp/athos/20110119/p1
358 :デフォルトの名無しさん2011/10/30(日) 09:46:24.36
確かに試してみると
SystemStackError: stack level too deep
で落ちてるな

デカイ数を試すテストになってねぇじゃねぇかw
389 :デフォルトの名無しさん2011/10/30(日) 18:12:55.92
>>357
>>358
なるほどスタック領域とやらを食いつぶして死んでただけなのか勉強になるなあ
でもこれ以外のメモリの使い方がよく分からん
例えば配列をドカッと確保したらそれはスタックではないから大容量使えるって事なのか?
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) でいけるらしいけど
367 :デフォルトの名無しさん2011/10/30(日) 11:10:11.19
>>361
/* each thread has this size stack : 128KB */
#define RUBY_VM_THREAD_STACK_SIZE (128 * 1024)

などとハードコーディングされてるっぽいよ
369 :デフォルトの名無しさん2011/10/30(日) 11:37:53.22
>>366
> ていうかunameじゃなくてulimitかな? 
どもども。単純にボケた

>>367
ソース眺めた感じではあとから変更はできなそうだね
(自分が読み間違えしてなければ)
どうもありがとう
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
368 :デフォルトの名無しさん2011/10/30(日) 11:17:06.27
>>366
Rubyも組み込みライブラリが結構デカいと思うから
そこは別に言われても気にしないな
問題はライブラリじゃなくて言語本体の微妙な感じ
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)
375 :デフォルトの名無しさん2011/10/30(日) 12:26:40.05
>>371
単純なものならwhileのほうが絶対的に速い
ただし、実際に処理をループ内にいろいろ詰め込んだ場合は不定

というか、whileやeachで平易に書けるならinject使う理由がねえ
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
それはないです
少なくとも一般に知られている妥当動作のものはない

あるべきだと思うんだけども
391 :デフォルトの名無しさん2011/10/30(日) 19:59:17.71
>>374
GC.malloc_allocated_size
GC.malloc_allocations
ってのがソースには存在するけど
デフォルトでは無効化されてる

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

どういう機能なのかはわからんけど
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が減る
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
本当に欲しいのは初心者ガイドや初心者用逆引きシステムであって、別のマニュアルではないよね
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
390 :デフォルトの名無しさん2011/10/30(日) 18:23:39.28
スタックはスタックだ
…説明めんどくさいな、いわゆる一般的に言われるメモリ領域とは違…うん、まあ、違う
瞬間的な処理予約数っていうのがシステムの制限由来で決まってて、再帰は再帰ループが終わるまでその予約数を1つずつ使用する
再帰のようなものや無限ループでなければ、スタックを食い潰すようなことはない
もちろんシステムのメモリの制限があるが、その制限しかないとも言える
配列の要素数や文字列の長さは、システムのメモリの制限しか受けない
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
ここの文字列リテラルの所とリンクされてるバックスラッシュ記法、式展開を読んで
どう使い分けるかを考えよう
396 :uy2011/10/31(月) 03:50:53.22
使い分けなくても良い

個人的にはreuireだけ''で他は大体""でやっている
ひとつだけ言えば、全部''でやったら死ねって思うけど
全部""だったら別に有り
基本""でやって''でやったほうが良い箇所を見つけたら''使えば良いレベル
399 :デフォルトの名無しさん2011/10/31(月) 07:19:32.67
>>395,>>396
ありがとうございます。
>>395
式展開が使えるので""で囲んだほうが柔軟、という表現が正しいのかはわかりませんが
そんな感じなんだなという風に理解しました。
>>396
思いは書かれているのですが理由がなく・・・すいません、よくわかりません。
401 :デフォルトの名無しさん2011/10/31(月) 07:38:10.19
>>399
…そう読めるなあ
式展開 #{うめこみ} を使用しないなら、使用しないという意図がわかるように、誤爆が起こり得ないように 'シングルクォート' で囲む
というのが一般的
「式展開しないならダブルクォート使ってんじゃねーよ!」「うっせーアスペ!」とかいうケンカが稀にある程度

実際にはまあどうでもいいので(Rubyの式展開自体、どんなエディタでも目立って存在がわかる)、好きにするといい
なんでもダブルクォートで囲むのはPerlの人かなとも思う
402 :デフォルトの名無しさん2011/10/31(月) 08:10:46.45
>>401
ありがとうございます、''には誤爆防止という事もあるんですね
397 :デフォルトの名無しさん2011/10/31(月) 04:27:57.02
https://www.ruby-toolbox.com/

最近知ったんだが便利すぎデザインに気合入りすぎでワロタ
るびまもこんな感じのギラギラしたデザインにしようぜ
403 :デフォルトの名無しさん2011/10/31(月) 08:22:50.72
Perlでダブルクォートが多用されるのは、ダブルクォートのほうが文字列として認識しやすいのと、
シングルクォートだとバッククォートと見分けがつきにくいという理由から。

Perlを踏襲してるRubyでも同じことが言えるかもしれないけど。
404 :デフォルトの名無しさん2011/10/31(月) 08:28:09.77
原則ダブルクォートで、特に展開しないという意図を示す時には
シングルっていうルールでやってるが、
まあよく考えたら逆でも問題ない気がする
406 :uy2011/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言語に足りないものを教えてください
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の定義を読み込むのが解決策です。
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/
415 :4122011/11/01(火) 09:25:09.89
Hoge#operation がけっこう重たい処理を含んでいまして、クラス定義だけ抜き出したいところなのですがソース眺めてもチンプンカンプンというしだいです。

具体的には gem databasedotcom の Databasedotcom::Client#query なんですが。
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]
427 :4122011/11/01(火) 22:22:39.90
どうもありがとうございます > 413,414,416,417

ソースを眺めたところ Class.new + α して動的にクラス定義するメソッドがあったので、
これを使って必要なクラスを用意してから Marshal.load したらできました。
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解説サイト読め
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で勉強して
その後変更点や新機能をググればいいかも
439 :uy2011/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
ワンライナー的な、という話は読まないのね相変わらず
446 :uy2011/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]
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が出たんですが問題ないのでしょうか・・・
444 :デフォルトの名無しさん2011/11/04(金) 04:30:46.37
警告だけでコンパイルが終了したなら大丈夫
稀にコンパイルできない人がいるんだが
445 :デフォルトの名無しさん2011/11/04(金) 09:30:01.55
いまんとこまだウォーニングゼロは方針にはなってなかったはず
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作る時点でコケてる
455 :4492011/11/04(金) 20:40:02.05
みなさん回答ありがとうございます。
>>450
One-Click Installerは1.9対応していないみたいなので。

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

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

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

454 :デフォルトの名無しさん2011/11/04(金) 20:21:24.37
ruby/re.h をコピーするの?
どっちにしても Ruby 1.9.2 ならあっさり成功するよかん
456 :デフォルトの名無しさん2011/11/04(金) 20:44:41.42
rubyinstaller再インストールしてみたら
460 :4492011/11/04(金) 21:01:13.94
>>456 458
1.9.2の再インストールで解決しました。
ありがとうございました!
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 自体にカレントディレクトリが含まれていたので、この説明は正確ではない)
481 :デフォルトの名無しさん2011/11/06(日) 05:07:32.11
>>467
$:.unshift "."
ではなくて
$:push "."
なの?

>>468
そこでいう「カレントディレクトリ」って、プロセスの?
それとも「require 'hoge'」が書かれてあるファイルが置かれているディレクトリのこと?
前者なら、require_relative 'hoge' した場合、プロセスのカレントディレクトリが変わると、読み込まれる hoge.rb の位置も変わる。
後者なら、プロセスのカレントディレクトリの位置によらず、読み込まれるhoge.rbの位置は一定。
どっちでしょう?
512 :デフォルトの名無しさん2011/11/07(月) 11:59:30.91
>>481
> そこでいう「カレントディレクトリ」って、プロセスの?
> それとも「require 'hoge'」が書かれてあるファイルが置かれているディレクトリのこと?

後者。

468の説明はおかしいと思う。
require_relative "hoge" は、require File.expand_path("hoge", Flie.dirname(__FILE__))
と実質等価、のはず。
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")
と書けるようになるわけか。
これは便利だなあ。
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が繰り返されている
それでもマッチするのはどうしてなんでしょうか?
初歩的な質問ですみません。
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"にマッチするということ
475 :デフォルトの名無しさん2011/11/05(土) 21:38:15.44
aが0回でもいいんだから、cの直前の文字がaである必要はない
476 :デフォルトの名無しさん2011/11/05(土) 21:41:56.48
なるほど!
とてもわかりやすいレスありがとうございます!
479 :4742011/11/05(土) 21:45:06.89
じゃないよまったく
"abcccccc"というマッチ対象文字列の"c"にマッチする、の誤り
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 で例外が起きても実行したい処理があるなら適当に例外キャッチとかしろ
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__
492 :デフォルトの名無しさん2011/11/06(日) 17:56:23.06
>>488
間違えた

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

foo do
 メインのコード
end
494 :デフォルトの名無しさん2011/11/06(日) 19:58:07.32
>>492
def foo
 fooに入った直後に実行
 yield
ensure
 fooから抜ける直前に実行
end
でいい。begin-endは不要
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
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とかいう声が勢いを増しておる。
493 :デフォルトの名無しさん2011/11/06(日) 19:45:46.55
>>491
ありがとうございます
プロジェクト管理はredmineっていうぐらい聞くのでredmineが使えないのはきついですね
ご紹介してくださった2つも検討してみます
495 :4902011/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 ディストリビューションてありますか?
お勧めを教えてください。

499 :デフォルトの名無しさん2011/11/07(月) 07:28:19.56
>>496
今あなたが使っているディストリかな
Linuxならだいたい問題ないかと
最悪ソース落としてコンパイルすりゃいいし

…今使ってるディストリなんてねーよ!ってんなら
Linux板で聞いてくればいいんじゃね
497 :デフォルトの名無しさん2011/11/06(日) 20:47:19.66
特にはない
GCCコンパイラがきちんと利用できるのなら自力コンパイルには問題はない
パッケージとして安楽に利用可能なディストリビューションというのは現時点では存在しない
ぜんぶ自力でコンパイルとパッケージ非依存でインストールするのが早道
498 :デフォルトの名無しさん2011/11/06(日) 21:23:14.90
きちんとパッケージングされ続けているディストリビューションってないよね
まだ文句言いながらrvm使うしかないのか
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使ってないのならやめとけとしか
506 :デフォルトの名無しさん2011/11/07(月) 11:02:15.60
rubyinstallerでインストールしているのですが
zipのをダウンロードして実行フォルダにパスを通すだけでいいですか?
507 :デフォルトの名無しさん2011/11/07(月) 11:03:13.99
用途はruby1.9.2を今入れているのですがruby1.8も入れたいので
フォルダ名をrubyにしてフォルダ名を変更するだけでバージョンを切り替えられるようにしたいのです
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"
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だっつってんだろ
581 :デフォルトの名無しさん2011/11/09(水) 23:30:24.10
>>514
cygwin入れましょうぜ
517 :デフォルトの名無しさん2011/11/08(火) 00:24:08.51
c/:www/cgi以下にtest.rbとかindex.rbというCGIファイルがあります
これをrubyで簡易サーバとして動かす機能ってありませんか?
localhost:8888/test.rbにアクセスできて表示できると楽なんです
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のハッシュ部分はクライアントからサーバに転送されるのでしょうか?
530 :デフォルトの名無しさん2011/11/08(火) 22:49:50.57
今からrubyに手を出そうかと思っているものですが、
たのしいrubyの2版は現行のrubyを学ぶのには不足、時代遅れなところがあったりするでしょうか
532 :デフォルトの名無しさん2011/11/08(火) 23:44:45.50
Rubyで作られたWebサイトってCGIとして動かしているのでしょうか?
535 :デフォルトの名無しさん2011/11/09(水) 01:47:22.22
>>532
そこでCGIが真っ先に出てくるのなら、あなたが書いてレンタルサーバ上で動かすようなスクリプトはおそらくCGIのはず
533 :デフォルトの名無しさん2011/11/09(水) 01:22:36.57
メソッドからの戻り値はreturnを書くのかと思ってたけど、
rubyでは通常はreturnを省略する、ってマッツの本に書いてあった
けどマジ?

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

ただ、稀になにがなんでも書かない(returnを書かなくても動作する不自然な構造で作ろうとする)人がいるんだけど、
returnを書いたほうが明快なジャンプ構造になる場合はちゃんと書いて欲しい
遅いったって、そんな目に見えて遅くなるわけじゃない
540 :デフォルトの名無しさん2011/11/09(水) 04:08:35.30
実行しようとしているコンソールがサポートしている文字コードを調べる方法ってないかな
DOS窓だと基本UTF-8は文字化けするけど、netbeansはutf-8の方が都合が良いし
その他のコンソールの場合も考えて対応している文字コードに合わせて出力する文字コード切り替えたいんだけど
どうやったらいいんだ?
541 :デフォルトの名無しさん2011/11/09(水) 05:07:35.10
chcp 65001
547 :デフォルトの名無しさん2011/11/09(水) 07:42:43.09
>>543
>>541みたいな人は実際にはWindows持ってないことが多い
542 :デフォルトの名無しさん2011/11/09(水) 05:12:57.94
それはUTF8に切り替えられるけど、フォントはスクリプトから変更できないから配布の際に困るだろ
543 :デフォルトの名無しさん2011/11/09(水) 05:15:39.11
chcpって、実際には全然使えないよね
1.9.3からはwindowsでもutf-8のまま出力して大丈夫なようになってる
544 :uy2011/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を使う

次からソースも貼ってね
548 :デフォルトの名無しさん2011/11/09(水) 07:49:15.00
>>546
ありがとうございます
ちょっと今手元にPCないので後で試してダメならソース貼ってみます
551 :デフォルトの名無しさん2011/11/09(水) 08:15:18.69
>>548
前からずっと思ってたんだけど、それ意味ないよね
こちらが知りたいのは試してどうだったかであって、あなたがレスをいつ読んだかどうかじゃないよね
558 :デフォルトの名無しさん2011/11/09(水) 15:40:34.58
>>546
ダメでした

ソースは
#/usr/bin/ruby
print("b\n")
だけです。文字コードの問題でしょうか?
549 :デフォルトの名無しさん2011/11/09(水) 08:08:19.21
お前らがどんなにピーピーギャーギャー言ったって
強がろうが俺をバカにしようが

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

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

実際、今どうなのか言ってみろよ?wwwおい?wwwwww
このゲロみたいなくっせえゴミRubyは使われてるの?
流行ってるの?ヒットしてるの?日本だけだろwww
発表時みたいな状況になってんのかよ?wwwwwwwww
俺Rubyやってるんだぜ!って人前で言えんのお前ら?wwwwああん?wwwwwwwww
ゴミ言語すぎてそんなの人前で言えるわけないよなwww
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
スレタイに沿った書き込みが多いのは当たり前なんで、「こうした方がいいぜ」と言い続けてりゃ良いんじゃないの?
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を起動してみるとバックスラッシュが\になりうまく行きました。
原因がわからず気持ち悪いのですが、ありがとうございました
564 :デフォルトの名無しさん2011/11/09(水) 16:29:41.64
>>561
emacs-gtkはなにも設定しない場合、「へ」の隣あたりの、日本語キーボードで円記号が印字されてるキーを押すと \ を入力する
これはもろちんバックスラッシュではなく、YEN SIGN だ
基本的には「ろ」の \ を使え
562 :5602011/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)に、なります。

どうしたらよいでしょうか?
563 :5602011/11/09(水) 16:29:33.83
自己解決しました。
拡張子の表示を、表示しない設定のため、ファイルの最後に.txtが入っていました。
失礼しました。
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
576 :デフォルトの名無しさん2011/11/09(水) 21:35:15.90
>>573
整形って、うまいことインデントしてくれるモノ?
575 :デフォルトの名無しさん2011/11/09(水) 21:22:41.01
group_byとかしらなかったわ。こういうのってリファレンス読んで見つけるの?
578 :デフォルトの名無しさん2011/11/09(水) 22:44:43.04
JSONなんてパーズが済めばHashとArrayなんだから、
インデント付きの文字列表現が欲しいだけなら
標準添付ライブラリのpp(pretty print)を使えばいいのでは?
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を呼ぶ前のオブジェクト)

でいいんじゃないの? という話。
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でハッシュ作るより便利なことに気づいた
582 :デフォルトの名無しさん2011/11/10(木) 10:48:28.13
やっぱ初心者は.1.9.2からはいったほうがいいんですか?
puts "こんにちは"で表示されなくなったりするバグとか出ても対処できない
592 :デフォルトの名無しさん2011/11/11(金) 06:29:17.30
まだredhat系は1.9をパッケージにしてないのか
どうしようと思ってるんだろ?
593 :デフォルトの名無しさん2011/11/11(金) 08:37:02.63
1.8を捨てるのが無理なんだろ
下位互換を考えないからこんなことになったのだ
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されなくなるよ
601 :デフォルトの名無しさん2011/11/12(土) 15:41:23.15
>>597
一瞬Ruby製のbotかと思った
Rubyに限らずRTとかリプライとかしてくるbotはいっぱいある

ああいうの、RTするならするで@つけない非公式RTにしてくれたらいいのに
599 :5832011/11/12(土) 13:51:19.15
ウィンドウズでユニコードファイルって扱えますか?
Dir.openで開いて読み込むとその時点でファイル名がwindows-31jになってるんですが
ruby1.9.2です
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のエンコーディングに変換して返しちゃってるみたいだな。
文句言えば修正してもらえる可能性もあるが、当分無理だろうな
602 :デフォルトの名無しさん2011/11/12(土) 18:12:59.97
Open-uriを利用してJavascriptが有効でないと表示できないページを取得するのは不可能ですか?
見せかけだけでもいいのですが

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

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

610 :デフォルトの名無しさん2011/11/12(土) 21:49:32.70
>>602
そのためにTwitterでAPIが用意されてるでしょ
612 :デフォルトの名無しさん2011/11/13(日) 08:10:53.22
>>602
たしかtwitterのスクレイピングは規約違反
API使え
ってか、gem twitter を使えばいいのでは
606 :デフォルトの名無しさん2011/11/12(土) 20:35:22.51
Dir.openはエンコーディング指定できるみたい(マニュアルに無いけど)
Dir.open('/', encoding:'UTF-8')

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

ハッシュでのオプションの指定というのが今までよく知らなかったので勉強になりました。
ありがとうございました。
607 :デフォルトの名無しさん2011/11/12(土) 20:44:31.60
Dir.glob("*.*".encode("UTF-8"))
611 :デフォルトの名無しさん2011/11/12(土) 22:22:17.31
>>607
なるほど
引数のエンコーディングと同じエンコーディングで返ってくるのか
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"}
ではダメな理由があるのでしょうか?
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 なるほど!すっきりしましたありがとうございます
614 :デフォルトの名無しさん2011/11/13(日) 13:20:40.11
ハッシュはサーバに送信されないんだから大人しくAPIを覚える作業に入ってればいいよね
615 :デフォルトの名無しさん2011/11/13(日) 13:30:53.03
RubyにはJavaと同じようなpublicとprivateとprotectedというものはクラスにはないのですが?
617 :デフォルトの名無しさん2011/11/13(日) 14:00:24.33
その部分はやっぱりRubyにある思想というものが影響しているからでしょうか?
618 :デフォルトの名無しさん2011/11/13(日) 16:19:08.63
適当に実装しただけなので、気にするな
622 :デフォルトの名無しさん2011/11/13(日) 18:04:28.12
>>615
同じような動作をするものはない
名前は同じだが動作は全く違う
言語構造が違うからそもそも同じ動作になるはずないじゃん、というのが一応の答

実際にいちばん近いのは>>618
「JavaやC++にあるやつをRubyで作ってみようシリーズ」の負の遺産は他にも attr_accessor とかがある
621 :デフォルトの名無しさん2011/11/13(日) 18:02:13.37
俺がRubyを学ぶ理由
・国産の言語だから
・PythonスレよりRubyスレの住民のほうが親切に回答してくれる人が多いから
・PHPしかできないとバカにされるから
623 :デフォルトの名無しさん2011/11/13(日) 23:48:08.97
メタプログラミングRuby読みながら
Class.newではクラス名を指定するときに
ClassName=Class.new do
# 初期化コード
end

とかしないといけないとあるけど
第1引数にシンボルか文字列が来たら、クラス名にする
foo = Class.new :Foo
とか実装予定無いかな…
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を選んだのは何故ですか?
629 :デフォルトの名無しさん2011/11/14(月) 11:23:51.16
>>627
何故Rubyを学ぼうと思わないのですか?
Perl,Python,PHPを置いてRubyを選ばないのは何故ですか?
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はテンプレートエンジンだし論外
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 "あ"
631 :デフォルトの名無しさん2011/11/14(月) 11:24:57.64
>>628
-Ku
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で文字コード指定するから書かなくていいと思ってました
638 :デフォルトの名無しさん2011/11/14(月) 12:04:48.26
>>636
別にshebang(#!なんちゃらかんちゃら)書いても2行目に書けるから書いとけ
HTMLのmetaで指定しようがRubyには関係ない

1.9のマジックコメントは必須
-K オプションはあくまで1.8からの以降用だからマジックコメント使っとけな
641 :デフォルトの名無しさん2011/11/14(月) 13:06:11.46
>>637
すいませんブラウザで表示したときにファイルをUTF-8にしてmetaで文字コードを指定しておけば大丈夫だと思ってました
>>638
これからは2行目に書くようにします
念のため- Kuも書いておいたほうが完璧ですよね
644 :デフォルトの名無しさん2011/11/14(月) 13:29:11.92
>>641
「ファイルをUTF-8にしてmetaで文字コードを指定しておけば大丈夫」だとどこに書いてあった?
637 :デフォルトの名無しさん2011/11/14(月) 11:59:07.30
「書かなくていい」ってどこに書いてあった?
640 :デフォルトの名無しさん2011/11/14(月) 12:57:37.28
マジックコメントの -*- って書かなくてもいいんですか?
Emacsのためにあるとか聞いたような気がするんですが
642 :6282011/11/14(月) 13:08:17.71
最後に質問なんですが
http://jp.rubyist.net/magazine/?0023-Cgirb
を見るとRubyはCGIに向いてないとかかれてました
まつもと先生はcgi.rb に代わるライブラリを公募するって行ってましたが
これは2008年の記事なんですが1.9.3ではもう解決されている話題でしょうか?
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やりたいと思った次第です
648 :デフォルトの名無しさん2011/11/14(月) 15:40:52.17
>>646
CGIに向いてないのはライブラリがうーんって感じなのが大きい
651 :デフォルトの名無しさん2011/11/14(月) 16:07:55.25
>>646
TwitterはRubyを使ってたけど遅いCGIは使ってないはず
CGI(とCGIの代替になるもの)について調べたほうがいいよ
649 :デフォルトの名無しさん2011/11/14(月) 15:49:08.69
このスレで、○○は向いてないって言うやつは、ただ知識がないだけなので無視していい
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とアプリがくっついてる
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
いくつも定義するときは特異クラスにしてる
659 :デフォルトの名無しさん2011/11/15(火) 15:42:01.99
>>657-658
サンクス。
なるほど特異クラスの方が流行りなんですね。
特異クラスだとインスタンス変数も(メソッドと同じように)
クラスインスタンス変数になるんですね。
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じゃないと逆にめんどくさい
660 :デフォルトの名無しさん2011/11/15(火) 23:42:27.12

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

例として >のgの文字は変換の対象からはずし、他のgは文字変換の対象とする。もっと具体的に
>>giants is great のような文章中に存在するgを<b>g</b>で囲いたいのですが、普通に全変換していまうと
&<b>g</b>t;となって、実体参照が可笑しくなっていまいます。いいプログラムのやり方が思いつかないのでよろしくお願いします。
683 :デフォルトの名無しさん2011/11/16(水) 12:02:57.31
>>677
>ある任意のhtmlのソースを読み込んで、もちろん実体参照はこわれないようにして、表示の一部分のみ変換する

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

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

HTMLパーザについては、たとえばxmlscanのようなライブラリがあるから、
自分に合うものをRAAやRubyForgeで探して利用しなさい
あるいはRacc等の字句解析/構文解析処理の知識があるなら、自力で書くこともできる
686 :6602011/11/16(水) 12:25:44.59
>>683
その通りの理解です。であるので相当複雑です。説明不足だと思います。
一応いろいろ調べてみます。htmlパーサーですか。やはりツールを使うのか

イメージとしてはyahooのトップページのソースを右クリックで保存して、フォームから任意の文字列を入れて、その文字のみ装飾する(例えば色つけるなど)プログラムを打ちたかったのです。
689 :デフォルトの名無しさん2011/11/16(水) 13:30:36.23
>>686
俺PHPで文単位に切り分けるプログラムを書いたことあるけど、かなり遅かったよ。
ファイルの大きさに対して指数関数的に処理時間が増加する感じだった。
これたぶんメモリーの使い方が悪いんだよね。
PHPが糞だからとか、お前のコーディングが糞だからって言いたいだろうけど、
たぶんRubyでも誰がやっても同じ結果になるんじゃないかな。
俺がやったやりかたは、ブロック要素を切り分ける必要はないってことと、インライン要素は
切り分ける必要があり、且つ切り分けに何も問題がないって考えで、テキスト側から
切り分けた後、タグの優先順位に従って再合成した。
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>"))
667 :デフォルトの名無しさん2011/11/16(水) 04:48:43.62
こんなのはどう?

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

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

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

イメージとしてはcntC+fで文字検索すると黄色いハイカラーが文字つきまよね?あんな感じでフォームで文字入力して変換した文字をhtmlに吐き出す最終的なものです。
もし、よろしければ、アイデアだけでもいいので良い考えを持っている人がいれば是非宜しくお願いします。ずっと考えても思いつかないんですよね。
669 :6602011/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 をかけて、
着色結果に非対象文字列を連結して、

というようなことをえんえんやればいいような気がする
674 :デフォルトの名無しさん2011/11/16(水) 09:56:53.82
>>671
じゃあ、宜しくお願いします
678 :デフォルトの名無しさん2011/11/16(水) 10:41:47.17
アンカーミス
>>670は>>672さんです
673 :デフォルトの名無しさん2011/11/16(水) 09:41:23.83
StringScannerでやれば簡単じゃん
675 :デフォルトの名無しさん2011/11/16(水) 09:57:53.74
>>673
試して見ますね
677 :デフォルトの名無しさん2011/11/16(水) 10:40:17.76
>>670
行き着く先繰り返しですよね

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

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










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
682 :デフォルトの名無しさん2011/11/16(水) 11:57:58.17
>>679
はいはい

>>680
そのコードじゃタグないも処理されます
無理です
684 :デフォルトの名無しさん2011/11/16(水) 12:04:35.76
>>682
じゃあタグ除外するようにすりゃいいじゃん
681 :デフォルトの名無しさん2011/11/16(水) 11:08:37.93
戻り読みすればいいんじゃねと思ったら戻り読みで繰り返し使えないのな
685 :デフォルトの名無しさん2011/11/16(水) 12:05:25.04
一文字ずつ読み込んで処理して<が出たら>が出るまで無視、&が出たら;が出るまで無視じゃだめなん?
687 :デフォルトの名無しさん2011/11/16(水) 12:32:57.06
簡単にやるなら680の正規表現にタグの正規表現を追加。
真面目にやるならjavascriptで処理。
688 :デフォルトの名無しさん2011/11/16(水) 12:49:54.37
実際にhtmlの処理に必要なのは、どれだけ間違ったhtmlを処理できるかになるから、ブラウザ利用するのが最強
jqueryのハイライトプラグインでも使ったほうが手っ取り早い
690 :デフォルトの名無しさん2011/11/16(水) 13:59:47.88
初心者におすすめの開発環境を教えてください
693 :デフォルトの名無しさん2011/11/16(水) 15:10:11.96
>>690
スクラッチ
695 :デフォルトの名無しさん2011/11/16(水) 16:00:07.23
るりまに [[trap:Regexp]] とか [[trap:Numeric]] とかいった記述があるんだけど、
これなあに?
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で破綻するから、ゆるゆるのパーサを自分で書いたほうが使える
700 :デフォルトの名無しさん2011/11/17(木) 22:03:54.69
for文マジ使わないのな。内部でeachとかもうね。存在意義がわかんね。

マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006
マイクロソフト ワイヤレス ブルートラック マウス Arc Touch Mouse RVF-00006