Ruby 初心者スレッド ..
810:デフォルトの名無しさん
09/01/25 21:52:42
久しぶりにスレみたら>>747で吹いた。
男じゃん。と思って検索したら、こんなに可愛い子が女の子なわけないじゃないか
811:デフォルトの名無しさん
09/01/25 22:18:03
ググってしまったじゃないかww
812:デフォルトの名無しさん
09/01/25 23:26:45
調べたらショタアイドル。ぐぐr必要なし
813:デフォルトの名無しさん
09/01/25 23:38:45
>>812
ぐぐってしまったじゃないか
814:デフォルトの名無しさん
09/01/25 23:45:15
密林で注文したじゃないかw
815:デフォルトの名無しさん
09/01/26 03:25:48
puts "文字"
puts "文字"
puts "\n"
srand
require 'readline'
def try_answer(prompt)
while buf = Readline.readline(prompt, true)
yield buf
end
end
difficulty = ($*[0] || 1).to_i
difficulty >= 1 or raise "#{difficulty}: Invalid difficulty direction"
answer = rand(30 * difficulty + 1)
judge_table = ["文字1","文字2","文字3"]
try_answer("文字 > ") do |line|
try = line.to_i
result = try <=> answer
puts "#{try}#{judge_table[result]}"
break if result.zero?
end
プログラミングに興味が出て、いろいろさがしてたら
学校の過去の資料にこんなプログラムがありました。
これはどんなプログラムなんでしょうか?
一文一文の意味を教えていただけないでしょうか?よろしく
おねがいします。
816:デフォルトの名無しさん
09/01/26 03:31:54
マルチは感心しないな
817:デフォルトの名無しさん
09/01/26 03:32:21
ruby経由でwgetしつつ出力を表示しつつ、log.txtにもはきつつってことをやりたいのですが、上手くいきません。
画面には表示されますが、log.txtには何も書き込まれないという・・・
これは何がおかしいものなんでしょう
Dir::chdir("/work") do
system("wget URLリンク(example.com) | tee log.txt")
puts "read log.txt"
puts File.read("log.txt")
end
818:デフォルトの名無しさん
09/01/26 03:45:55
>>817
wget の出力は標準エラー出力に表示する
tee は標準出力を取り込むことしかできないから、そもそも log.txt にはなにも書き込まれない
wget URLリンク(localhost) 2>&1 | tee log.txt
Ruby あんま関係ないな
819:デフォルトの名無しさん
09/01/26 03:57:25
>>818
いけた!そっかwgetエラー出力だったのか・・・
基本的なところをうたがうべきなのにすっかり忘れてた
820:デフォルトの名無しさん
09/01/26 04:00:33
これを意識してる人はまずいないよ
これはむしろ wget の欠陥だと思う
821:デフォルトの名無しさん
09/01/26 05:47:44
Rubyでwebサーバーにアクセスしたとき
そのサイトにどんなファイルがあるか調べる方法はありますか?
822:デフォルトの名無しさん
09/01/26 06:03:15
index許可してあればリスト取り出せるけど
そうじゃなければ_
823:デフォルトの名無しさん
09/01/26 09:16:34
robotでも作るつもりなのかな
824:デフォルトの名無しさん
09/01/26 11:26:53
>>820
wget の場合、標準出力は -O - で取ってきたものを出力するためにあるので
(他のツールにパイプで直接流し込んだりとか)、そういう時にも一貫性を保てる
ように、メッセージは標準エラー出力というのは理にかなっている。
メッセージをファイルに取りたいなら -o filename オプションを使うという手もあるが。
Ruby 関係ないな。
825:デフォルトの名無しさん
09/01/26 11:30:37
>>822
Ruby関係ないよね
っていうか、HTMLやHTTPの勉強はしてもらってるのかね
Rubyは魔法じゃねえぞ
826:デフォルトの名無しさん
09/01/26 11:39:31
Ruby関係ないということがわかるだけでも勉強としては前進だから、どんどん聞くだけ聞いてもらってもいいけどな
回答としても「ちげーよRuby関係ねーよ」と答えるだけでいいから楽だし
Ruby内でwget使ってログ管理しようとして嵌るというのは順調なテンプレの範囲だと思う
827:817
09/01/26 12:24:18
そもそも、コマンドラインで
wget URLリンク(example.com) | tee log.txt
ってやってみてRubyの問題なのか、そうじゃないのか切り分けるべきでしたね
なにあれ、解決したので助かりました。
828:デフォルトの名無しさん
09/01/26 13:40:37
Ruby 1.8でDir.globに複数のパターン(というか拡張子)を指定する方法は
ありませんでしょうか?
(Dir.glob("**/*.css") + Dir.glob("**/*.html")).each do |file|
:
end
のようにするしかない?
829:デフォルトの名無しさん
09/01/26 13:44:36
>>828
マニュアルに初心者お断りな感じできちんとわかりにくく書いてあんじゃんよ
irb> Dir.glob("*")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]
irb> Dir.glob("*.txt")
["002.txt", "001.txt"]
irb> Dir.glob("*.txt\0*.jpg")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]
830:デフォルトの名無しさん
09/01/26 13:49:16
あれわかりにくいよね
素直に第一引数は配列受け取るようにすればよかったのに
831:デフォルトの名無しさん
09/01/26 15:37:35
ネットワーク上にあるExcelファイルを、
open-uriを使わずにnet/httpを使ってFileオブジェクトに格納する方法はあるでしょうか
832:デフォルトの名無しさん
09/01/26 15:52:09
>>831
bodyをそのままwriteするだけじゃダメなんだっけ?
833:828
09/01/26 15:52:40
>>829
本当だ!
> パターンを "\0" で区切って 1 度に複数のパターンを指定することもできます。
>
> p Dir.glob("f*\0b*")
> => ["foo", "bar"]
マニュアルみたつもりで見落としていました。
ありがとうございました。
834:デフォルトの名無しさん
09/01/26 15:57:50
>>832
bodyメソッドを実行すると「string contains null byte」とエラーが出てしまいます・・
835:デフォルトの名無しさん
09/01/26 16:05:54
めんどくへえ
イントラ限定のサーバかなんかで変な形式で送られてきてると予想
ヘッダはなんて言ってる?
836:デフォルトの名無しさん
09/01/26 16:10:15
レスポンスのヘッダでしょうか?
HTTP/1.1 200 OK
Date: Mon, 26 Jan 2009 07:08:59 GMT
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26
Last-Modified: Mon, 26 Jan 2009 00:11:23 GMT
ETag: "3f1629-48000-497cffab"
Accept-Ranges: bytes
Content-Length: 294912
Content-Type: application/vnd.ms-excel
こんな感じです
837:デフォルトの名無しさん
09/01/26 16:10:22
>>834
エラー箇所どこ?
win32なのにバイナリモードでFile.openしてないとかいうオチはない?
838:デフォルトの名無しさん
09/01/26 16:14:04
>>837
さすがにそれはないと思いたい
839:デフォルトの名無しさん
09/01/26 16:23:08
>>837
orz おさわがせしました
840:デフォルトの名無しさん
09/01/26 16:29:17
>>838-839
初心者スレだしこんなミスもいいんじゃね?w
解決したならなによりだし(あのエラーを見たことは無いから自信はなかった)
騒がせたと懲りてるようなら、もう同じミスをしてもすぐ自分で気づくだろうから。
841:デフォルトの名無しさん
09/01/26 17:16:29
>>833
glob 構文だけを純粋に使って、*.{css,html} これでもいんじゃない。
842:デフォルトの名無しさん
09/01/26 17:29:56
>>833
・{ } コンマで区切られた文字列の組合せに展開します。
Dir.glob("**/*.{css,html}") do |file|
puts file
end
1.9だと配列で複数のパターンを渡せるようになった
843:デフォルトの名無しさん
09/01/26 17:39:27
あらら、かぶっちゃった
Dir[pattern] 形式だと1.8でも複数のパターンを指定できるよ
Dir["**/*.html","**/*.css"].each do |file|
puts file
end
844:828
09/01/26 17:40:13
>>841-842
おお、便利だ!
> { } コンマで区切られた文字列の組合せに展開します。
> 例えば、 foo{a,b,c}はfooa, foob, foocに展開されそれぞれに対してマッチ判定を行います。
> 括弧は入れ子にすることができます。例えば、 {foo,bar{foo,bar}} は
> foo, barfoo, barbar のそれぞれにマッチします。
これですね。ありがとうございました。
845:デフォルトの名無しさん
09/01/26 20:20:17
>>843
完全に単なるエイリアスだと思い込んでた…
glob構文めんどいから
["**/*.html","**/*.css"].inject([]){|r, i| r.concat Dir.glob(i) }
こんなことしてたぜ…横から感謝
846:デフォルトの名無しさん
09/01/26 22:36:34
>>843
すげー。知らんかったわw globとは別なのね
847:デフォルトの名無しさん
09/01/26 23:20:28
>>843はオレも知らんかったので助かるんだけど、でもこれっておかしいよね。
ほんとはglob()と同じにすべきだよな。わざわざこんなふうにしている意味が分からん。
848:デフォルトの名無しさん
09/01/26 23:24:54
> ほんとはglob()と同じにすべきだよな
いまさらglobを変えるわけにいかないからせめて関数的メソッドDir[]は配列を受け取るようにしたという流れだと思った
よく覚えてない
849:デフォルトの名無しさん
09/01/27 02:16:31
Dir[]とDir.globの違いはなんだろ(引数以外)
Dir[]全部列挙で、Dir.globはブロック渡すと逐一処理可能ってことか?
850:デフォルトの名無しさん
09/01/27 03:32:53
glob2とか作ってコンパチ目指したほうが。
なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかwww
Content-Transfer-Encoding: base64とか付いてるとか?
851:デフォルトの名無しさん
09/01/27 09:23:26
>なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかw
あほか
それは事実だが結果的にそうなった
つまりそういう開発ポリシーだからそうなる必然
文句云うな
852:デフォルトの名無しさん
09/01/27 09:25:48
日本語でおk
853:デフォルトの名無しさん
09/01/27 09:37:46
まぁ文句あるならもっと良いもの自分で作れってことだろ
そうやってMatzんは煽って北
854:デフォルトの名無しさん
09/01/27 11:11:36
「開発ポリシー」で互換性を残したままにするから、
結果的に古いのが残っているってことでしょ
855:デフォルトの名無しさん
09/01/27 11:36:22
Rubyのコアライブラリ近辺って「1つ目」を作る人は大量にいるけど「2つ目」を作る人がいないんだ
全部自前でクラスやメソッド改造してしまうから
Ruby1.2くらいで「このライブラリの存在は大きいので、では本格的なものを添付しましょう」という流れにならないのがRuby
856:デフォルトの名無しさん
09/01/27 13:16:40
cgi2chとかいうライブラリができたら楽しいなw
857:デフォルトの名無しさん
09/01/27 14:00:45
>>844
シェルのワイルドカード展開と一緒だよ。コマンドラインで多用しない?
diff -c nagainamaenofairumeiwonandomoutitakunai.rb{.orig,}とか。
858:デフォルトの名無しさん
09/01/27 14:16:40
確か次世代cgi.rbは、候補はあるけど決定的なものがないという理由で今のままなんだよね
859:デフォルトの名無しさん
09/01/27 14:24:55
cgi.rbをとりあえずな感じで添付したらそのまま数年維持されて癌になったという経験が尾を引いてるな
860:デフォルトの名無しさん
09/01/27 15:40:24
互換性なんかどこに残ってんだよ
861:デフォルトの名無しさん
09/01/27 16:26:19
クラス CGI2ch::BBS
クラスメソッド
CGI2ch::BBS.new([index])
最新の板一覧取得用URL(複数候補可)を指定
インスタンスメソッド
menu()
板一覧を取得
戻値 (cat, host(FQDN), board, name) のリスト
例:
[('', 'www.2ch.net', '', '2chの入り口'),
('', 'info.2ch.net', 'guide', '2ch総合案内'), ...,
('ニュース', 'mamono.2ch.net', 'newsplus', 'ニュース速報+'), ...,
('PC等', 'pc11.2ch.net', 'unix', 'UNIX'), ...
('PC等', 'pc11.2ch.net', 'tech', 'プログラム技術'), ...]
board(name)
CGI2ch::Boardのインスタンスを生成
862:デフォルトの名無しさん
09/01/27 16:26:43
クラス CGI2ch::Board
クラスメソッド
CGI2ch::Board.new(host, board)
インスタンスメソッド
subject()
スレ一覧を取得
戻値 (key, title, res) のリスト(スレッドキー, タイトル, レス数)
例:
[(1223709050, 'Rubyについて Part 33', 624),
(1233033091, '愛国Ruby', 14), ...]
thread(key)
CGI2ch::Threadのインスタンスを生成
863:デフォルトの名無しさん
09/01/27 16:27:07
クラス CGI2ch::Thread
クラスメソッド
CGI2ch::Thread.new(key)
CGI2ch::Thread.create(name, email, body)
新スレを立ててインスタンスを生成
インスタンスメソッド
read(key)
write(name, email, body)
864:デフォルトの名無しさん
09/01/27 16:27:32
>>856
こんな感じで計画中だけど
どう?
865:デフォルトの名無しさん
09/01/27 16:32:48
クラスメソッド
CGI2ch::Thread.new(board, key)
CGI2ch::Thread.create(board, name, email, body)
新スレを立ててインスタンスを生成
boardが必要かな
866:デフォルトの名無しさん
09/01/27 16:42:18
>[(1223709050, 'Rubyについて Part 33', 624),
> (1233033091, '愛国Ruby', 14), ...]
なにこれ
867:710
09/01/27 17:22:38
>>711
Railsのスレあったんですね。
気づきませんでした。
>>715
コメントありがとう。
結局原因がわからなかったので、rjsの中でhtml(<option></option>)を組み立てて、selectボックスに
対してreplace_htmlしたら回避できました。
868:デフォルトの名無しさん
09/01/27 17:29:56
>>864
計画倒れにならんようにがんがれ
869:デフォルトの名無しさん
09/01/27 17:42:31
2chの仕様なんて面倒だぞ。
専用ブラウザ開発者はマゾヒストとしか思えない。
870:デフォルトの名無しさん
09/01/27 18:00:13
>>864
スレ違い
2ch専用ブラウザの作り方
スレリンク(tech板)
871:デフォルトの名無しさん
09/01/27 18:14:12
>>862
愛国はかんべんw
872:デフォルトの名無しさん
09/01/27 18:17:05
>>871
はいはい面白いね至高のギャグだね
873:デフォルトの名無しさん
09/01/27 19:18:57
リファレンスマニュアルの使いにくさをどうにかしてください。
例えば、タイムアウトさせたい処理について調べたい場合、目次を見てもどこを見ていいのかさっぱりわかりません。
874:デフォルトの名無しさん
09/01/27 19:26:10
あ、オフィシャルサイトは検索休止中なんだっけ
timeoutで全文検索すると出てくるぞ
875:デフォルトの名無しさん
09/01/27 19:35:31
「Ruby マニュアル」でぐぐると「ruby マニュアル 検索」が関連で出てくる現状はどうにかしたほうがよい
URLリンク(www.google.com)
876:デフォルトの名無しさん
09/01/27 21:08:35
URLリンク(doc.loveruby.net)
るりまはいつになったら公式化するのだろうか
877:デフォルトの名無しさん
09/01/27 21:22:00
>>876
MLいわく、静的HTMLを吐くツールが整備されてから
878:デフォルトの名無しさん
09/01/27 23:59:46
>>864
期待してます
879:デフォルトの名無しさん
09/01/28 00:01:28
>>864
そんなことしてる暇あるんなら
Rubyのリファレンスマニュアルを検索出来るようにしてくれさい
880:デフォルトの名無しさん
09/01/28 03:16:09
つ refe2
881:デフォルトの名無しさん
09/01/28 04:26:03
Rubyラブじゃ☆
882:デフォルトの名無しさん
09/01/28 05:49:46
>>879
さっさとchm版を使ってください
883:デフォルトの名無しさん
09/01/28 11:53:50
require "active_support" すると、
あらゆるオブジェクトに daemonize というメソッドが付いてくるんですが、
これって ActiveSupport が意図してやってるんでしょうかね?
こうするメリットが良くわからないんですけれども。
884:デフォルトの名無しさん
09/01/28 12:03:24
Kernel や Object クラスのようなものに外部モジュールがメソッドを追加するというのは議論を呼ぶ設計なのは確か
ActiveSupport::Daemon.daemonize(obj) みたいなのでいいじゃんというのも指摘としては真っ当
そこで笑ってこっち見てる YAML 君もこっち来なさい
885:デフォルトの名無しさん
09/01/28 13:25:11
require "active_support"を使わなければ問題ない
886:デフォルトの名無しさん
09/01/28 13:45:39
String#each_line(sep) って、中で事前に巨大な配列作ってますか?
「ちょっとずつ」改行まで読み込んで返している動作ですか?
887:デフォルトの名無しさん
09/01/28 13:47:17
フラッグ型に保ち合ってきた。どっちかにブレイクするかもな。
888:デフォルトの名無しさん
09/01/28 13:50:12
誤爆・・・
889:デフォルトの名無しさん
09/01/28 13:55:36
>>886
String#each_lineだから「読み込んで」は不適当な気がするが、
改行を探しては1行作ってyieldし、という挙動ではある。
890:デフォルトの名無しさん
09/01/28 13:59:42
str.split(/sep/).each do |line|
と
str.scan(/\G#{sep}/){|line|
なら、String#each_line は後者のイメージに近いと思われ
「str が 大きかったら each_line 1回のためだけにでっかい配列ができて胃が痛い」とか考える必要はないかと
891:デフォルトの名無しさん
09/01/28 14:06:07
やっぱ str.to_a.each_with_index do …はあんまりよくないのか
each_line_with_index って each がえにゅめらぼーウンタラの関連でどっかのバージョンで登場してたりする?
892:デフォルトの名無しさん
09/01/28 14:19:37
>>891
行番号が知りたいんだろうけど、each_lineは行ごとにループ呼ばれるから
自分でカウントアップすればいいんじゃない?
893:デフォルトの名無しさん
09/01/28 15:05:28
str.each_with_indexじゃダメなん?
894:デフォルトの名無しさん
09/01/28 15:21:04
String から呼ぶ Enumerable のメソッドって String をどう扱うかイマイチわからん
895:デフォルトの名無しさん
09/01/28 15:29:55
>>892
> 自分でカウントアップすればいいんじゃない?
なにそのwith_indexの存在意義自体を土足で踏みにじる暴言
896:デフォルトの名無しさん
09/01/28 15:36:40
>>893,895
1.9のStringってeachがなくなってEnumerable非対応に
なるんじゃなかったっけ?
>>894
Enumerableのメソッドは全てeachに依存してるから、eachに準ずる。
直観的じゃないという話なら同意。
897:デフォルトの名無しさん
09/01/28 15:37:02
Rubyには放っておいても増える隠し定数のループカウンタとかないの
898:デフォルトの名無しさん
09/01/28 15:43:37
>放っておいても増える
そんなもんあったら問題だw
899:デフォルトの名無しさん
09/01/28 16:59:30
1.8.7以降限定ならstr.each_line.with_indexでいいんじゃないの。
それより前だったらstr.each_with_indexでいいし。
900:デフォルトの名無しさん
09/01/28 17:02:23
each_with_index自体あんまり使わないから正直どうでも良い
901:デフォルトの名無しさん
09/01/28 17:06:36
行志向のファイルを処理するスクリプトを書かない人には無用の長物だな
902:デフォルトの名無しさん
09/01/28 17:15:11
全機能使って書いてるのはRubyを作ってるモルモンくらいでしょ
903:デフォルトの名無しさん
09/01/28 17:20:55
昔どのメソッドが何するもんかは覚えても実際使わないと忘れて逝くのが人類です
904:デフォルトの名無しさん
09/01/28 17:55:08
>>894
1.9でString#eachがなくなって Enumerableじゃなくなったのはそれが理由だよね
バイト単位なのか、文字単位なのか、行単位なのか一般的には決まらないので
自分で明示して each_byte か each_char か each_line を使えと
でも自分スクリプトで
Stringが行単位のEnumerableなのを利用して
いきなり文字列の sort とかuniqとかしてたんだよね
で、1.8.6以前と1.9以降の両方で動くようにスクリプトの頭で
unless String.method_defined?(:each)
class String
alias each each_line
include Enumerable
end
end
905:デフォルトの名無しさん
09/01/28 18:31:47
>897-898
$.
906:デフォルトの名無しさん
09/01/28 23:19:41
よいまとめがあったんでシェア
Ruby1.9をこれから使う人のためのM17Nまとめ - 福島でRailsを使って仕事を頑張る計画
URLリンク(d.hatena.ne.jp)
>>887
市況2?w
907:デフォルトの名無しさん
09/01/29 03:47:31
>>864
wktk
908:デフォルトの名無しさん
09/01/29 04:19:58
1.9なら
str.each_line.with_index {|line, idx| ... }
でFA。でかい配列を作ったりもしない。
909:デフォルトの名無しさん
09/01/29 10:32:14
1.9知りたきゃ、これ見ろってことっすかね?
日本Rubyの会 公式Wiki - 1.9 Links
URLリンク(jp.rubyist.net)
910:デフォルトの名無しさん
09/01/29 11:02:09
>>909
リファレンスマニュアル見ろよ
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5504日前に更新/246 KB
担当:undef