プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
前スレ Part 43
http://hibari.2ch.net/test/read.cgi/tech/1305973297/ ★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。
関連スレやURLは
>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す
http://www.ruby-lang.org/ja/man/ ・FAQを一応読む
http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
これからRubyを勉強するなら1.9.x系を使いましょう もはや1.8.x系はメンテナンスのみになります
アフィリンクが1個貼ってあるだけで拒絶反応とかどんだけ嫌儲だよ
これは中の人乙だなw
まあ別にコピペしただけなんで不快なら次スレから抜いてくれれば
>>3 はなくてもそんな困んないだろうし。
>>10 >嫌儲は、自身が所属するインターネットコミュニティ内の共同制作物を第三者が個人的利益のために無断借用をする行為に対して嫌悪感を持つことである。そのため、当該コミュニティに対する帰属意識が高いほど顕著に現れる傾向がある。
嫌儲(けんもう、けんちょ)とは金儲けを悪と考える思想、感情、もしくはその活動、態度、それを行う人物、団体を示すインターネットスラングである。 嫌儲 けんちょ 人が儲ける行為を嫌うこと。 嫌儲とは特にインターネットにおいて、金儲けが絡む活動・宣伝を嫌うことを表した言葉である。 別に「自身が所属する〜」はそれが典型的なパターンってだけで必須の条件じゃないな。
なんで新スレ早々こんなクソみたいな話題で盛り上がってんの
やっぱり
>>3 は要らんな
Gogofmtみたいなソースコードを整形してくれるツールはありますか? 特にEmacsから使えるツールを探しています。 ただインデントするだけじゃなくて、 class Ruby ←こういう後ろの空白も削除されてほしいです。 def foo(bar) @bar =bar←こういうイコールの左右の空白もそろえて欲しいです。 end ←こういう改行もなくして欲しい。 end
ではイコールの左右の空白を整えられるよう さくっとパースしてみてください
UniversalIndentGUI もRubyに使えるらしいですよ
両方半角1個にしてしまっていいなら str.gsub!(/(\s+)?(=の前にセットで付く可能性のある記号群)?(=)(\s+)?/){ " #{$2}#{$3} " } こんなんで出来るんじゃないすかね。試してないけど。 文字列リテラルやコメントを排除したり、揃え方に条件つけるのはご自分でどうぞ。
rubyってそれほどテキスト処理に優れてるかなあ? 言語解析ライブラリは無いし、文字コード判定も外部任せダゾ。
テキスト処理と言語解析って全然別物だぞ
Raccがあるじゃないか。使ったこと無いけど
>>19 最後のをすっぽかしたら誰でも書けるけどそれじゃ何の役にも立たない
getsしているときにIDEの候補選択みたいの出来るライブラリってないですか IRBみたいなヒストリではなく
文字コード判定を、なんでライブラリでやって悪いんだ? 言語がそんなもの抱える必要があるんだ?
形態素解析がしたいならMeCabでも茶筅でもJumanでもライブラリあるから使えばいいし。
>>20 は全く意味不明
>>22 別に「簡単にできる」なんていった覚えはないから、
コメントやリテラルの退避まで書く義理はない。
「イコールの左右の空白を整えられる」処理を書いただけ。
揃え方の条件つけるのは条件が提示されていない以上ご自分で、
としか言えない。エスパーじゃないからな。
>>16 のRuby Script Beautifierは
文字列やコメントの退避をしてくれるようだから、
これを改造すればお望みの整形ツールになるんじゃないかなあ。
前スレ、CSVはRFC4180で規格化されてるよ。 問題はその後で付いてるレスの通り、 誰が従うのかってところだわな。
配列の場合は無限に拡張し続けるコードを 書かない限りは問題が無いので イテレート中の要素追加は自己責任で ハッシュの場合は限定個のキーを追加するだけでも 領域拡張が発生してリハッシュでイテレート順が変化して 正常に列挙し続けることができない可能性があるからエラーにする などと考えたけど、1.9では順番も保持してるので がんばって実装したら配列と同程度には安全になりそうな気がするが なにがまずいのだろう? まさか実装が面倒だからだったりじゃないだろうな ひょっとして他の処理系で実装しにくいからとか? 「binding_of_callerはJRubyで実装しにくいから不採用」だったような気が
外部イテレータ使えカス、で終わる話のようにも見える
残念ながら、イテレータが内部、外部であろうと問題は変わらないよ
>>27 CSVは本当はエスケープまわりが小難しいんだということが周知されないと問題はよくならねえ
ライブラリを通じての読み書き以外は今後数年間禁止で
XMLを手作業でゼロから書く人がいないのと同レベルで、CSVを手作業で読み書きしてはならない
うるせえな初心者スレッドで語ってんじゃねえ
Ruby1ヶ月程度の俺でもわかる話題なのに
>>23 Readline.completion_proc=
Time.nowと指定したい時刻の差をとってその秒数だけsleepすればいいんじゃないの?
sleepは精度悪いから指定した時間を前後するよ
>>37 以前の1.8系列のWindows用はやばかったけど、
今手元で試したら1.8.7も1.9.2まともだったよ。
ミリ秒単位だとOSのAPI直接呼んでもどうしようもないしね。
>>35 Rubyでタスクスケジューラに登録すればいい
マシンの時刻を司ってるOSがタイマー処理してくれるから、
Rubyスクリプト起動にかかる時間を考えなければ時刻的には理想的に動作するぞ
秒数を間違って欲しくないなら、
>>36 をやって10秒くらいごとに補正かけ続けないと安心できない
現在が指定した時刻か判断→違っていたら1秒スリープ、で永久ループ
>>40 とかぶるけどこんなのがお手軽だね
loop do
break if Time.now > (Time.strftimeとかして指定した時刻)
sleep 0.1
end
基本的に時間関係はOSさんに聞くしかないからなあ。 1.指定時刻までOSに現在時刻聞きまくりつづけて指定時刻以降だったらbreak 2.現在時刻と指定時刻の差をとってその時間だけ眠らせといてよ、とOSに頼む 3.現在時刻と指定時刻の差をとって一定値S以上ならSだけスリープ、 差が一定値S以下ならその値だけスリープしてからbreak みたいな方法しかない。 内臓されてる言語でも内部ではそういう感じの処理をしているだろうし。
localhostにアクセスするとCGIで動的に文字列(半角英数字)を生成します print "aaa\n" print "bbb\n" print "ccc\n" print "\0" # coding: Windows-31J require "socket" socket = TCPSocket.open("localhost", 80) get = "GET / HTTP/1.1\r\n" get += "Host: localhost\r\n" get += "Connection: Close\r\n\r\n" socket.puts get while buf = socket.gets puts buf end socket.close 上記は「ruby ソケット」でググってコードを書いてみて、サーバにソケット通信して文字列を表示するコードです。 これを\0が来るまでwhileでループをするように書き換えたいのですがご教示お願いいたします
一応whileの中にif文で判定したらできるのですが 先生方のお知恵を拝借させてください while buf = socket.gets if "\0" == buf then puts "null" break; end puts buf end
60 - Time.now.sec秒スリープしながら時刻チェック
>>44 一行の途中に"\0"があるケースは考えなくていいの?
while buf = socket.gets
if idx = buf.index "\0"
puts buf[0...idx]
break
else
puts buf
end
end
文字列中には\0がこないように削除します(ヌルバイト攻撃対策のため) 最後に\0を出力(\0の後に改行も入れない)するので取得した値が\0であれば終了という形でやりたいです
while( (buf = socket.gets) != "\0") puts buf end while(buf = socket.gets) break if buf == "\0" puts buf end s="shshfsnana\0usjsjs" s =~ /(.*)\0/ p $1
>>48 一番目はsocket.getsがnilを返す可能性があるから
二番目のほうがいいだろね
whileの中でifで判定するしかないですね ありがとうございます
FINパケットじゃだめなん
FINパケットの使い方がわかりません
自分がここで勉強してきたことをまとめていくのって良い事ですか? ここの先生方は初心者時代の頃はやりましたか?
54 :
デフォルトの名無しさん :2011/06/13(月) 21:27:21.07
>>51 アプリケーション層のプロトコルの話としては関係ないと思うよ。
(1) a = ["a","b","c","d","e",1,2,3,4,5] b = a[rand(a.size)] puts b これはエラー出ません (2) b = "" 5.times{ b += a[rand(a.size)] } puts b と書くとエラーになります (3) b = "" 5.times{ b += a[rand(a.size)].to_s } puts b と書くとちゃんと表示されます 何故(1)ではエラーにならないのに(2)でto_sを書かなかったらエラーになるのでしょうか?
56 :
デフォルトの名無しさん :2011/06/13(月) 21:56:12.78
TypeError: can't convert Fixnum into String Rubyは暗黙的な型変換イカんでしょ
>>55 (1)では、bには文字列が代入されたり、整数が代入されたりする。
どちらが入っていても、putsが勝手にto_sするので問題は生じない。
(2)では、bには最初から文字列が入っている。
文字列と+で連結できるのは文字列そのもの(と、to_strが定義されているオブジェクト)だけで、
(2)でa[rand(a.size)]が数値になったときに
文字列 + 数値
の式が生じてエラーになる。
can't convert Fixnum into String
エラーメッセージもたまには読んであげて。
String#+
>>55 「と書くと」じゃなくて「と書いた場合にrand(a.size)が5〜9になると」だろ
bは文字列なのにaには数値も入ってるんだからto_sがなきゃそりゃエラー出るわ
「数値」は「数字」じゃないってこととエラーメッセージが出たらとりあえず丸ごと検索窓に突っ込んでみることを覚えろ
(1)でもきちんと同じように書けばTypeErrorが出る b = "" b = b + 1
自分の環境では(2)はundefined local variable or method `a' for main:Object (NameError)がでました
>>61 (1) を実行してから (2) をやることを意図してる
っていうか、それもきんとエラー読もうよ
>>61 a = ["a","b","c","d","e",1,2,3,4,5]
ぐらいは補ってやれよ
>>56 厳密に話し始めると、to_strがあるからその辺は微妙じゃね?
言語として型付けが強いのは間違いないんだが、
暗黙の型変換っぽい挙動もライブラリ次第で認めてしまう
僕にはRubyが難しいようです
"1" + 1がエラーになる言語もあればそうでない言語もある RubyやPythonは前者、PerlやPHPは後者に属する そういう決まりになってるってだけのことだよ
>>55 まずは、もうちょっと問題の切り分けが出来るようになった方がいい
randのような不確定要素を先に排除することを考える
>>66 awkみたいに文字列をゼロ扱いする言語もあるし……
もう言語によってやりたい放題
>>64 できないじゃなくていけないというのはまあそれなりに正しいと思うよ。
to_strとかto_aryとか、よっぽどでないと使っちゃいけない。
>>68 awkはよく知らないけど
「文字列も場合によっては0として扱われる」じゃない?
% echo 1 | awk '{print 1 + "hello"}'
1
% echo 1 | awk '{print 1 + "10"}'
11
class Fixnum def to_str self.to_s end def + s self--s.to_i end end a = ["a","b","c","d","e",1,2,3,4,5] b = a.sample puts b b = "" 5.times{ b += a.sample } b = "" 5.times{ b += a.sample.to_s } puts b
ファイルに記録したXMLを整形して別のファイルに保存したいのですがファイルに書き込めませんでした どなたかお助けください require "rexml/document" xml = open("./a.xml") {|f| f.read } doc = REXML::Document.new(xml) formatter = REXML::Formatters::Pretty.new(2) formatter.write(doc, "./xml.txt")
中間形式にすることを厭っちゃダメよ 文字列なら File.open(path, 'wb'){|f| f.print(str)} で書き込めるというのはわかってるんだから、 ライブラリ独自の処理はとりあえず無視して、書き込みたい文字列を返してもらうようにすればいい
質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・最終的にやりたいこと(もっとよい方法がある場合が多いので) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
失礼しました Windows XP sp3 Ruby1.9.2 require "rexml/document" xml = open("./a.xml") {|f| f.read } doc = REXML::Document.new(xml) formatter = REXML::Formatters::Pretty.new(2) a = "" formatter.write(doc, a) open("./b.xml", "w") {|f| f.write a } こうやるとxmlを整形してファイルへは書き込み出来ますが 何故formatter.write(doc, "./xml.txt")でファイルに書き込めないのかがわかりません
>>72 REXML::Formatters::Pretty#write(node, output)
はoutputにパスを渡されたらそのファイルを開いてそこに書き込むなんて動作はしない。
"./xml.txt"という文字列を生成してその末尾にテキストを書き込ませてそのまま捨ててるから
ファイルに書き込まれようはずもない。
s = ''
formatter.write(doc, s)
File.open('./xml.txt', 'w'){|f| f.write(s)}
とするか、
File.open('./xml.txt', 'w') do |f|
formatter.write(doc, f)
end
としないとだめ。
>>75 "./xml.txt"はファイルとは関係ないただの文字列だから。
formatter.write(doc, "./xml.txt")
のどこでファイルを開いてるの?
formatter.writeは第二引数に「書き込み可能なオブジェクト」を受け取って、
そこに書き込んでいくだけ。
文字列を渡せばその文字列オブジェクトに書き込むだけだし、
書き込みモードのIOオブジェクトを受け取ればそこに出力する。
文字列を渡したときにパスとして妥当か判定して
パスの形式になってたらファイルを開いて書き込んで、
そうでなければ文字列に直接書き込むみたいなめんどくさい動作はしてくれないっす。
現実的には formatter.write(doc, $stdout) させておいて出力先はリダイレクトで、とする方が使いやすい気がしなくもない。
REXML::Formatters::Pretty#write がめんどくさい動作になってるってだけの話だったりもする
>>75 write(node, output) の内部で output << to_string(node) をやってるからだよ
output は << 可能なオブジェクトでなければならない
まあ、若干不親切ではある
マニュアルには書いてあるけどね
> output::
> # An object implementing '<<(String)', to which the output will be written.
まあつまり formatter.write(doc, "./xml.txt")は "./xml.txt<xml>\n <nantoka>\n <kantoka>txt</kantoka>\n </nantoka>\n</xml>" みたいな文字列作って捨ててるだけってことですな。
たくさん繰り返すループの中で同じ内容の文字列や正規表現を使うときは やっぱりループ内にリテラル書くより、 ループ前に変数か定数に代入しといて ループ内では参照するだけにした方がいいの?
>>79 で終了
っていうか、REXMLなんて無理してまで使わんでよろしい
ファイルサイズにもよるけど、パースにかかる時間で require 'nokogiri' のお釣りが来るぞ
>>81 答はNOだ
ブロックの外の変数や定数を参照するのは、ブロック内のローカル変数を参照することよりもわずかにコストが高い
ループ内に直書きしたほうが、速度的にはちょっと速い
万単位のループでは、ちょっと効いてくる
あと、 #{埋め込み} のない完全リテラルな /正規表現/ は Ruby がコンパイル畤に記憶するから何も考えなくていい
>>81 試してみたよ。
require 'benchmark'
S = 'String'
Benchmark.bm(10) do |x|
x.report('CONST:'){200000.times{s = S}}
x.report('LITER:'){200000.times{s = 'String'}}
end
user system total real
CONST: 0.031000 0.000000 0.031000 ( 0.031250)
LITER: 0.078000 0.000000 0.078000 ( 0.078125)
>>84 そのテストは文字列生成のコストがかかっているから不正だ
# -*- coding: utf-8 -*-
require 'benchmark'
S = 12345
Benchmark.bm(10) do |x|
x.report('CONST:'){2000000.times{s = S}}
x.report('LITER:'){2000000.times{s = 12345}}
end
user system total real
CONST: 2.080000 0.010000 2.090000 ( 2.314962)
LITER: 1.630000 0.000000 1.630000 ( 1.813098)
例によって Ruby 1.9 では誤差レベルだな よく頑張ったもんだ
>>83 ってわけで、文字列については処理内容によるんじゃないかしら。
ループ内でもともと捨てオブジェクトがあまり発生しないなら
オブジェクトが生成されまくり捨てられまくるコスト>ブロック外の定数参照のコスト
>>85 いやなんで整数なのよ。
>同じ内容の文字列や正規表現を使うときは
整数ならリテラル書いてもオブジェクト増えないからリテラルが速いの当たり前だわ。
これ動きません 何でですか? require "tk" TkLabel.new { text "Hello!!" width 10 height 10 pack } Tk.mainloop
>>88 >>1 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
どうせTcltkが入ってないとかそういう……。
>>87 じゃあ正規表現リテラル(埋め込みなし)でもいいよ
>>83 の言う通り、完全にリテラルな正規表現は1回しか生成されないから結果同じだけど…
っていうか、スコープとびだすときにかかる参照コストの話でもないのね
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]って出てきました
こうです <internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- tk (LoadError) from <internal:lib/rubygems/custom_require>:29:in `require' from C:/stadyruby/test.rb:1:in `<main>' 続行するには何かキーを押してください . . .
>>91 >スコープとびだすときにかかる参照コストの話でもないのね
てか実際はそのへんとオブジェクト生成コストの差し引きの結果がどうなるかであって、つまりは
>>87 なんじゃね
>>91 負けず嫌いだなあ。
文字列では先に代入しといた方が速いんだよ。
正規表現や整数は先に生成しとくって特別仕様なだけ。
浮動小数点数でも毎回生成されるからリテラルの方が遅いよ。
まあ、わかりにくいから、変数や定数に代入すべき理由が他にないときは
微妙に遅かろうがリテラル使う方がいいとは思うけど。
およ、2回書いたら2回生成されるからループの中でも毎回生成するかと思いきや、 ループ内ではFloatは1回しか生成されないらしい。
この問題は以前話題になったことがあって、結論は ・埋め込みアリの正規表現は埋め込むものが毎回同じならループ内にリテラルで書いてはいけない ・文字列の場合は先に代入すると微妙に速いが影響は大きくないので他の条件次第 ・整数や埋め込みのない正規表現、小数なんかはベタでリテラル書いちゃえ と最初からわかってるんでそこんとこよろすこ
101 :
uy :2011/06/14(火) 13:47:07.69
gem install tk-win
>>101 うああああああああありがとうございます
ウィンドウが出るようになりましたああああああああああああ
103 :
デフォルトの名無しさん :2011/06/14(火) 14:06:55.33
gets.to_fでルートの値を入力したいんですが計算式は入力できませんか?
>>103 …素直にコマンドラインの計算プログラム使ったほうが
IO.gets が返すものはただの文字列だ
その文字列をどう処理するかは何も決まってない
ルートを入力したいなら、入力された文字列がそのようであるときに、そのようになるようにすればいい
> ruby -e "puts eval gets" Math.sqrt(3) 1.73205080756888
instance_eval していいかどうかでかなり変わるな 計算記号のパースとかあんまりやりたくないわん instance_eval していいなら、Ruby で使える文字列をそのまま入力すればいい なんでもできてしまうのでセキュリティ的に大問題だが
>>106 eval教えたらCGI入力に対して使ったアホの子がいてだな…
108 :
uy :2011/06/14(火) 16:03:34.49
include Math def repl s s.sub!($1 , (repl $1).to_s) if s=~/\(.*?(\(.*)\)/ s =~ /\((.*?)\s(.*)\)/ case $1 when "+" , "-" , "*" , "/" , "**" return $2.split.map do |n| n.to_f end.inject $1.to_sym when "sqrt" , "p" return $2.split.map do |n| n.to_f end.inject 0,$1.to_sym end end p repl "(sqrt 2)" p repl "(+ 2 2)" p repl "(- 5 2 2)" p repl "(* 4 4 4)" p repl "(/ 10 2)" p repl "(** 3 3 3)" repl "(p (+ 4 8 9 (+ 8 3 (** 5 5 (sqrt 12)))))" #p repl gets
Rubyは数式処理ライブラリすらないのかよ ホビロンすぎる
いっぱいあるよ
rubyはテキスト処理向きだから数式処理が不得意なのはしょうがない。 言語解析ライブラリは充実してるけどね。
言語解析ライブラリなんてそんなあるのか?
言語解析ってmecabみたいなやつ?
114 :
デフォルトの名無しさん :2011/06/14(火) 18:02:11.52
たぶんraccとかtreetopとかのことだと思う。 mecabみたいなのは自然言語処理というのではないだろうか。
自然言語処理の一分野だけど、形態素解析、かな。
raccやtreetopみたいなのは自然言語処理的には統語解析と言うが、普通は
構文解析と言うかねぇ。
結論としては
>>111 は半可通。
[LF]は改行を意味します [\t]はタブを意味します [\s]は半角スペースを意味します ------------- a[LF] [LF] [\s][\s][\s][\s][\s][\s][\s][\s][\s][\s][\s][\s][\s][\s] [[\s](100.200) ------------- と ------------ a[\t][\s][\s][\s][\s](100,200) ------------ のどちらの場合でも100,200の部分を取得したいのですが str.scan(/a.*?\(([0-9,]*?)\)/)では後者のほうしか取れません 改行とタブとスペースが混じっていても取得する方法をご教示お願いします
自己解決しました マルチラインを設定したら取れました
最近いろんなプログラミング言語でyieldを見かけるけど言いだしっぺの言語はなんなん?
javascript
120 :
デフォルトの名無しさん :2011/06/15(水) 22:12:52.40
CLUだったかな。
javascript? 後発のイメージがあったけど
ピッケル本にCLUでyieldが使われてて云々って注がついてたなあ 言い出しっぺかは知らない
123 :
デフォルトの名無しさん :2011/06/15(水) 22:15:54.48
124 :
デフォルトの名無しさん :2011/06/15(水) 22:17:56.94
CLUが1974年だから、それより前にあるかどうかだな。
なるほど。ありがとさん
正規表現を表すクラスを作ってます。 '*' は Repeat, '|' は Choice でいいと思いますが、'?' は何と名前を付けたらいいでしょうか。
Prediction 音声を聞く
match
そんなん自分で考えろって感じだわ。
*がRepeatなら?, +もRepeatだろ。さらになんか修飾したら。
>>126 >'*' は Repeat, '|' は Choice でいいと思いますが
よくない
* は CleeneStar
| は Alternatives
正規表現のBNFさがせば適当に命名されてるのが見つかるんじゃね
*をクリーネスター、+をクリーネクロスと呼んでしまうと?を呼ぶ方法がなくなってしまうという罠
windowsでirbを起動するとreadline.dllが無いと怒られます。 そこでreadline.dllを見つけてインストールしましたが 今度はヒストリが効かなくなりました。 readline.dllがなくてもメッセージを出なくする方法か readline.dllありでヒストリを有効化する方法を教えてください。
まずは ruby -v を
失敬 ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32]
どうやってインストールしたんだよ
バイナリをダウンロードしてbinフォルダへ移動
エスペラントでおk
ローマ字読まなくても意図は伝わってくるな 再インスコしろと
最近質問少ないから勢い下がっちゃった
インストールはできています。
148 :
けいたいうゆ :2011/06/17(金) 02:40:48.90
いまさらいうけど あのすれたてしたuyは偽だから 別物だから 誤解なきよう
「うゆ」っていう文字列を「ばか」という文字列に置換すると特徴が把握できるよ
>>148 心配しなくてもuyの時点で同類としか見てないから誤解しても問題ないよ
うまくいきました。ありがとう。 リンク先の > このパッケージではreadline.soの問題(漢字入力不可、カーソルキーが利用できない)を修正するパッチ([ruby-dev:42232])を当てています。 が原因かもしれません。(Ctrl-PやCtrl-Nではヒストリは使えてたので)
毎回ウィンドウズの人がまともに動かすだけで苦労してるのを見ると、教祖と同じデビアンにしとけよと思う。 単にルビィは馬鹿には無理だけなのかもしれないけど。
Rubyを使うためだけにDebianにしたら本当に馬鹿だと思う
今はVMがかなり手軽に使えるからね。 手間隙かけてCygwin環境作るよりはVMでDebianをポンと入れて学習するのでもいいと思う。
ウィンドウズで詰まって投げ出すくらいなら、デビアンでちゃんと使えたほうがいいと思われ。 デビアンでもapt-getとか簡単なコマンドあるでしょ。 教祖がちゃんと動作確認しているもも大きいし。
まあLinux使ってたって詰まるところでは詰まるのだから わざわざ新しくLinux入れなくても Windows使いはWindows版、Linux使いはLinux版でいいと思う
普通は自分の環境を便利にするために言語なりツールなりを用意するわけで 道具のために環境用意するのは本末転倒だわな 学校か何かでRubyの学習が強制されてるとかならともかく
RubyInstallerなりASRなりJRubyなりなら問題ないわけだしな debianでもパッケージかRVMで入れるのが普通で 自力でソースからビルドなんてまずしないわけで 単に誘導の問題なんだろうな
WindowsでRuby環境作るのに手間取る人がデビアン使えるとはとても思えない。
ということを質問しないとわからない人がそれが問題になるようなプログラムを作るべきではない
それは回答になってないね
>>160 それを読んで意味がわかるならテストしてみたらどうだろう。
それを自力でテストできない人が読んで意味がわかるとは……。
分からないなら黙ってれば
そう思うならバカな質問はしないことだ。
>>160 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
サロゲートペアにOS関係ないだろう。。。。
OSの部分だけ取り出すとはマジキチか
少なくとも
>>160 から「サロゲートペアについて聞きたい」ということを読み取るのは大変困難だと思うが。
バカが質問してバカが答えるスレ
>>160 に上げられている記事を160自身が理解しているのであれば
Rubyでの実現方法は別として、
何をテストすればよいか理解でき、何を聞けばよいかも理解できるはず。
それを出してこないということは、160自身が何を質問してよいのか分かっていないことを示唆する。
記事への感想ならともかく、
160自身もわかっていない問に答えることは誰にも出来ない。
あるいは、Ruby1.9.2にはこういうことに気を配らなくてもいい素敵機能はあったりしませんか? ということかなぁ。 irbの文字列リテラルに \x?? で試してみると特に例外にもならずUTF-8なStringができるから、 ない、というのが答えになるけど。
自分だったら、件の記事を読んで、 1.9系のエンコードがUTF-8なStringをバイト列をもとに生成するようなシーンで、 バイト列が不正でかつ記事にあるようなパターンのときにどうなるかきになるし、 irbを適当に叩いて検証するんだろうけど、 それが160の問いとイコールかどうかなんてわからないからなあ。
>>173 一度UTF-16なんかに変換して不正な文字を置き換えるしかないかな。
"\xf0\x80\x80\xbc".encode("UTF-16LE",:invalid=>:replace,:replace=>'?').encode("UTF-8")
lambdaの再帰って何かいい方法ないの? なんなの? p lambda { fact = lambda { |n| if n == 0 1 else n * fact.call(n - 1) end } }.call.call 4 p Class.new { def self.lambda n if n == 0 1 else n * self.lambda(n - 1) end end }.lambda 5
177 :
デフォルトの名無しさん :2011/06/17(金) 16:02:43.52
Yコンビネータでぐぐる。
あれは見た目が最悪
YコンビネータやUコンビネータが嫌ならRubyの無名関数で再帰は使わないことにしましょう。
Yなんちゃらって結局変数を引数の場所に閉じ込めてるだけだからね def saik n yield( n , lambda do | n , f | yield n , f end ) end n = saik 5 do | n , f | if n == 0 1 else n * f.call( n - 1 , f) end end p n こういう方法もあった
def a *h if iterator? @aaa = lambda do |*h| yield *h end end @aaa.call *h end n=a 4 do | n | if n == 0 1 else n * a(n - 1) end end p n 完成した、お疲れ様でした
正しいディレクトリとファイルを指定しているのにもかかわらず、 No such file or directory -- (ファイル名)(LoadError)と表示されるのはなぜでしょうか。 osはvista、バージョンは1.9.2です。
>>182 質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
>>182 ライブラリのとこからじゃなくてカレントディレクトリから読もうとしてるなら
パスの頭に ./
正しいと思い込んでるだけかバグかだが前者の公算が高い。
187 :
uy :2011/06/18(土) 00:54:54.04
$0
で得られるファイル名のロードを試せ
それでもエラーでるならOSかRubyがおかしい
>>185 え?
>>182 エラーは略さず全部書け
かなり頻出の質問でrequire_relativeでググるか
>>184 か解決法は他にもいろいろある
不動点コンビネータなんて既にいくつも実装が考案されてるのに
「無名関数で再帰したい」という疑問が メソッドにして名前をつける(えっ) インスタンス変数に保存(定義してる文脈ではグローバル変数と同義)(えっ、えっ) っていうので解決されてると思い込めるのがすごいね!
「えーマジメソッド名!?」 「キモーイ」 「メソッド名が許されるのは小学生までだよねー」 fact = lambda{|n| lambda{ |f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}[ lambda{|proc| f[lambda{|args| proc[proc][args] }]} ]}[lambda{|f| lambda{|x| x == 1 ? 1 : x * f[x-1]}}][n]} p fact[5]
rubyでプログラム書くときみなさんはどんなIDEを使っていますか? やはりeclipseがおおいのでしょうか?
IDEを使っていない テキストエディタでおk
スクリプトでIDE使ったら負け
>>194 どうしてスクリプトでIDEを使ったら負けなんでしょうか?
必要ないから
自分の価値観を理由に据えるやつは三流以下
198 :
uy :2011/06/18(土) 12:59:40.31
>>190 僻みか
つうか処理系側で実装されるまで一時的に使うだけのものだぞ
多重再帰まで対応させる気はないし
>>191 それはもう2レス目ででてた
今更それをかかれてもな
一般人はlambdaの再帰なんて不要だもんな
はいはい
どうせ俺くらいだよ多用してんのは
IDEを使う理由を教えてください
このネタはいつも脳が老化してema糞以外を受け付けなくなった老害が暴れまくるから まともな結論は得られません。
emacsも使わないけどIDEとかどうでもいい。
Rubyに関してはそもそもほとんど助けてくれないからな 機能の差し引きでマイナスだと考えているひとのほうが多い IDEを使えば自動的に便利になるというのは間違い IDE側が意識的にサポートしているから便利になる
遥か昔に解決されたものを劣化で再発明して喜ぶ人がいるスレはここですか
IDEをバカにされて悔しいの?そんなに?
206 :
192 :2011/06/18(土) 13:13:24.05
ありがとうございます。 楽しいruby3を見ながら勉強しているのですが、IDEは特にいらないようですね。 秀丸などのテキストエディタ使って、コマンドプロプントで実行というスタイルにします。
好きなようにやりゃいいんだよ
208 :
uy :2011/06/18(土) 13:27:02.91
>>203 明らかに僻みだよねwwどうしちゃったのww
え?、俺はそれを使っていくよ
使いやすい形にするために作ったんだからさ
Yナンチャラの理論を数時間で突破してみせてみただけの事で、
uy的にはこの程度、なんでもないんですけど
Ruby in Steelで良い
なんと.NETアプリケーションが不完全ながらも作成可能
インストールの難易度はレベル4くらい
数時間で突破(笑) トップレベルのインスタンス変数やらメソッド名に束縛しちゃうのが使いやすい形ですかそうですかー。
RubyでIDE使う人と一緒に仕事はしたくない
211 :
uy :2011/06/18(土) 13:58:39.49
天才プログラマのuyさんははやくRuby普及の決め手になるキラーアプリを開発してくれないかなー。 まともなアプリケーションも作らずにごちゃごちゃ遊んでるだけで「俺はすごいぞ」とか言われてもー。
212 :
uy :2011/06/18(土) 14:04:18.95
「何も見ないで自力で作ったぞ!」なんてはりきられても「その証拠は?」って感じだし、 仮にそうでも汎用性のない劣化車輪の再発明だし、 なによりまともに使えるプログラムのひとつも書いてない奴にどう僻めばいいんだ。
214 :
uy :2011/06/18(土) 14:11:51.36
優秀なプログラマさんなら有用な成果物のひとつやふたつ提示できるでしょ、ほらほら。 一生車輪を劣化状態で再発明して「昔の人が長い時間をかけて作ったものを僕は数時間で突破したぞ!」って喜んでなよ。
1個だけ教えておくと
lambdaっていうのはオブジェクトの代わりになるんだよ
>>191 のこれは、 本来fっていう変数が定義されるべきものを、
変数ではなくlambdaオブジェクトにしただけで
実はそれ本当にただのスパゲッティソースなの
「lambdaがオブジェクトの代わりになる」っていう事を知らない子が作ったものじゃないかと思ってしまう
こういえばわかるかな、
ソース書いてる途中にちょっとlambdaの再帰がほしくなったときに、いちいち
>>191 これをかくというのか?
数学の世界の学術的には、そのlambdaで何でもできますよっていう証明にはなってるんだけど、
実際にプログラミングするときに、それを表面上にそれを持ってくるものではない
結局アセンブラレベルで見たら、lambdaだろうと、インスタンス変数だろうと同じだから、案外機械語では似たような事になってるかもよ
>>214 最近
http://hibari.2ch.net/test/read.cgi/tech/1306333092/267 これ作りました、30分で。
つうかRubyてもう十分普及してるんじゃないの VisualuRuby IronRuby 各種ゲームLib rails 他に何があればキラーアプリになるんだ 一応、OSのGUI関連書く前にRubyでアルゴリズム成熟させてからCで書き直そうと思って Rubyで見た目OSっぽいのは作っているからそれはそのうち公開してやるよ それに俺はRuby信者なのではなく、現状最もマシなのがRubyだからこれ使ってるだけで これより良い言語でてきたらすぐに裏切るよ ぼくは英語読めなくても英語サイトから情報拾ってくる事は出来るけれど 日本語のほうが読みやすいのは当たり前だから応援はしている
「30分で」という部分にゃ価値もなければ信憑性もないし、 こんなんメカナイズ使ってりゃ誰でもすぐに書けるね。 もっとまともなプログラムないの?
馴れ合いはほかでやっておくんなまし
まだ表示してる人いるんだなあ。
車輪の再発明と馬鹿にするのは初心者が通る道
IE,Firefox,ChromeのどれかのCookieをRubyで使うにはどうしたらよいでしょうか?
IEのクッキーなんかファイルに書き出されてるんだから勝手に使えばいいじゃん
どうやってサーバに送信したらいいですか?
Rubyと相性の良いLinuxって何ですか?
Debian
debianか〜CentOSかVineってダメなの?
そもそも相性なんて気にするほどのものは無い Windowsを除いては
228 :
デフォルトの名無しさん :2011/06/18(土) 21:08:20.28
32ビットインテルのDebianのみが"Rubyで定義されている意味で"サポート環境である、だけ。
>>217 そうではなくメカナイズをしらないところからググって
メカナイズインストールして、仕様を調べて、それを全部含めた時間が30分。、で作りました
理由、理由はPerlスレに迷える子羊がいたからです
まず俺のソース読みたいならツリー構造と再帰とマクロに慣れてる事と、
クラスを使わずにlambdaのみでプログラム設計した事があるってのが最低条件
関数を返す関数を返す関数とかが普通に出てくるけど、よめんのそれ
クラスを使わないプログラム設計って言われて君は理解できるのk
読めないを理由に「たいしたものじゃない」とか勝手に決め付けられて終わるのが目に見えてるから晒しません^^
正直すごいと思うんだが 関数を返す関数を返す関数とかが出てくるプログラムの設計書を書くとしたら 分かりやすくかけるもんなの? それとも設計書じゃない何かでプログラムの概要などなどを説明するの?
231 :
uy :2011/06/18(土) 21:29:11.48
コードが仕様書なんだよ(キリッ
lambdaによるプログラム設計(笑)
とか言うなら
>>180-181 なんてお粗末なプログラムを書くのはやめましょう。
お遊びじゃないまともに使えるプログラム書いてるなら ソースで複雑怪奇なことしててもプログラムの機能自体で評価されるじゃないか。 所詮ソースコードで「変わったことやってんなー」ってぐらいのお遊びコードしか書いたことなくて、 まともに開発なんかやったことないんだろ。
まともに開発するならRuby使わないだろw
OS製作前準備.rb は着々と形になっていってるけど、みるー?みたいー?
>>230 -n
どうでもいいな・・・
これを鬱というのか賢者モードというのか、どちらなのかはわからないけど、心が静かなんだ
土砂降りの雨に混じって、叫び声が聞こえる
梅雨の雨に、あの日の雨の名残を探しにいってくる
所詮2chの名無しなんて 俺が何を作ろうと、煽り続けるんだろう 相手してるとつかれるんよ 「OS製作前準備.rb」にかかれてるソースの断片すらどうせ読めない癖にな、何個の再帰がある事か 再帰で書きまくるソースコードを「一風変わったもの」というカテゴリに納める事しかできないから いつまでたってもそこにいるんだよ 普通にかくよりも再帰にすることでソースコードが格段に縮まる事くらいの知識は、あるだろう 俺はそういう場所にいるレベル もう、レベルは上がるところまで上がっているので、俺には何を言っても無駄 何かを作れって? は、? バカか お前らに使われるアプリケーション作る為に身に着けた技術じゃねーよ死ねバカ
>>234 あまり関係ない
なんらかのプロダクションコードを書いたことがあるかどうかは、言語問わず、普段のコードに反映される
ちょうど、社会人と学生の間に言動の差があるのに近い
Cでプロダクションの洗礼受けた人は、Rubyで書いてもPHPで書いてもHaskellで書いてもちょっと違う
>>192 IDEの中で今主流っぽいのはたぶんNetBeans
使いやすさと「元々は公式にサポートされてた」という事情から、けっこうメジャー
Eclipseにも色々プラグインはあるらしいけどよく知らない
あとはRDEもIDEの1種として数えるなら、そこそこ人気(色々不安定だけど)
でもまぁ、IDEが必要かどうかは個人と環境によって違う
俺の場合だとテキストエディタとIDE併用してたりするし
コアなemacs使いなら「IDEなんていらない」って人も多いだろうし
>>202 > Rubyに関してはそもそもほとんど助けてくれないからな
入力補完だけでもかなり大きな助けになるんじゃね?
gemや自作クラスからの入力補完便利だよ
>>235 ソースの名前出してるけど、結局コードが仕様書ってことなの?
rdocとかriで整備してるってこと?
で、他人が使うアプリじゃないってことは自分用アプリってこと?
まあそれなら設計書の類は要らないか
240 :
デフォルトの名無しさん :2011/06/19(日) 10:39:13.64
[1,2,3][3]が例外吐くようにするモードってないんですか
>>240 irb> class Array; alias _brak []; def [](i); raise ArgumentError.new('Out of Range') if size < i+1; _brak(i); end; end
irb> [1,2,3][3]
ArgumentError: Out of Range
from (irb):2:in `[]'
from (irb):3
irb> [1,2,3][2]
=> 3
ただし、non_nil_array[x] が nil を返すことで x が配列サイズ範囲外であるという検知をしているライブラリがあればバグる
策としては下の下で、やった瞬間全世界から指さされるレベル
ユーザー側で配列の大きさを事前にチェックするのが普通
if arr.size < x + 1 then
raise "#{x} なんて大きすぎて入らないよぉ"
else
arr[x]
end
fetchを使っても[1,2,3][3]が例外吐くようにはなりません。
うむ
>>240 ベースで
class Array; undef []; def [](x) fetch(x) end end
こんな感じ?
>>238 Rubyをワンライナー的な用途にしか
使わない人達もまだ少し残ってるからね。
そういう人達の狭い視野から見たらIDEどころかエディタすらいらないんだろう。
どんな局面で[1,2,3][3]が例外はいて欲しいのか分からないとなんとも言いようがないね
添字の範囲外へのアクセスなんて異常なことだから
例外吐くのはそれなりに合理的だと思われ
>>243 1.9だか1.9.2なら
>> [1,2,3].fetch(10)
IndexError: index 10 outside of array bounds: -3...3
それfetch(10)だからはいてるんであって[3]は吐かないよ
250 :
デフォルトの名無しさん :2011/06/20(月) 00:41:08.47
だから、吐いて欲しい用途のためにfetchがあるんだってばさ。
以下ループ 実際問題としては、Array#[] で例外が出るとみんな困るので、運用が間違っとるとしか言えない 自前で事前に配列のサイズチェックしろとしか っていうか、どうせ、例外が出たら処理変更するんだろ まさか例外をトップレベルの外にエラーとしてぶん投げるわけじゃないよね? まあ確かに begin process(arg) rescue BadArgumentProcessError fail_process end と if check(arg) then process(arg) else fail_process end は動作が違って、正常系がほとんどの場合は毎度の if check(arg) の処理のぶん動作が遅く… ならないことが多いと思う、check の重さにもよるけど たとえば、細かいファイルすべてに対して事前に File.exist? やると File.open の例外キャッチよりは遅い
数値がどんな計算しても0以下にならないとか10以上にならないとか そういうものを設定できる、メソッドかライブラリはないでしょうか? こんな感じ n = 0 n.min_set = 0 n.max_set = 10 p n -= 5 # => 0 20.times do n += 1 end p n # => 10
>>252 最終的に min か max つかえ
それと、Ruby の変数は箱じゃなくて、個々のオブジェクトに貼られたラベルに過ぎず、
さらに、若干悪いことに、数値は変更不可能なオブジェクトになってる
n = 2
としたあとに
n = n + 1
するというのは、 2 に 1 を足した結果のオブジェクトに n という変数名を新たにつけるという行為でしかない
254 :
デフォルトの名無しさん :2011/06/20(月) 01:40:12.40
class A def initialize n , min , max @n = n @min = min @max = max end def set s = @n return @n = @max if s > @max return @n = @min if s < @min @n = s end end n = A.new 0 , 2 , 7 p n.set 88 p n.set -6
>>255 優秀なプログラマとは思えないコードだな
まず関数名setはねーだろ
んで足し算はどうすんだ?n.set(5+10) とかやんのか?@nいらんだろアホか
そらならユーティリティクラスにするかトップレベルに関数置けよ
>>256 >>256 >@nいらんだろアホか
はあああぁっぁあああああぁぁぁぁあぁ?wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ちょっと本気だしてかいてくるよまってろ
確かに@nの意味がよく分からん #+などの定義を省略しただけなんだろうけど class Utility def self.clamp(min, n, max) raise ArgumentError.new("homuhomu") if min>max return min if n<=min return max if n>=max n end end (1..10).each do |i| puts "#{i}: #{Utility.clamp(3, i, 6)}" end
ダメだ、勘違いだったRubyにgotoないや
module A def self.extended mod f = self.test mod[:n] || 0 , mod[:max] , mod[:min] mod.define_singleton_method :set do | *s | f.call *s end end def self.test n , max , min lambda do | s = n | return n = max if s > max return n = min if s < min n = s end end end a = ({ :n => 0 , :max => 7 , :min => 2 }) a.extend A p a.set p a.set 8 p a.set p a.set 1 p a.set 妥協、 = での代入時に値ごまかすのはRubyだと無理かもな
262 :
252 :2011/06/20(月) 03:37:37.98
沢山のレスありがとうございます 標準ではないのですね・・・ その場にifかいちゃったほうがわかりやすいかもしれませんね
require "ostruct" module A def self.extended mod f = self.test mod[:n] || 0 , mod[:max] , mod[:min] mod.define_singleton_method :set do | *s | f.func *s end mod.define_singleton_method :set_ do f end end def self.test n , max , min hs = Hash.new hs[:n] = n hs[:max] = max hs[:min] = min a = OpenStruct.new hs a.define_singleton_method :func do | s = a.n | return a.n = a.max if s > a.max return a.n = a.min if s < a.min a.n = s end return a end end a = ({ :n => 0 , :max => 7 , :min => 2 }).extend A p a.set 99 a.set_.max = 12 p a.set 99 寝る前に投稿:ちなみに漏れのソースコード(ノードプログラミング)はこんな感じに、関数内のオブジェクトの全てに、外部からアクセスさせる手段を用意してる
お前何でこんな時間まで起きてるんだよ 職場がフレックスタイム制なのか?
1時間おきに5分ぐらい寝てるんじゃないかと想像
>>252 #valが必須というわずらしさはあるけど、こんな感じで。ちょっと見づらいかも。
class LimitedNumeric
def initialize(val, min=-1.0/0, max=1.0/0)
@min, @max = min, max; self.val = val
end
attr_reader :val, :min, :max
def val=(v)
@val = (v > @max) ? @max : (@max >= v and v > @min) ? v : @min
end
def min=(min)
@min = min; self.val = @val
end
def max=(max)
@max = max; self.val = @val
end
end
a = LimitedNumeric.new(0, 0, 10) # => #<LimitedNumeric:0x81fe944 @max=10, @min=0, @val=0>
a.val -= 5; a # => #<LimitedNumeric:0x81fe944 @max=10, @min=0, @val=0>
20.times{ a.val += 1}; a # => #<LimitedNumeric:0x81fe944 @max=10, @min=0, @val=10>
a.min = -5; a # => #<LimitedNumeric:0x81fe944 @max=10, @min=-5, @val=10>
a.max = 5; a # => #<LimitedNumeric:0x81fe944 @max=5, @min=-5, @val=5>
a.val = -20; a # => #<LimitedNumeric:0x81fe944 @max=5, @min=-5, @val=-5>
20.times{ a.val += 1}; a # => #<LimitedNumeric:0x81fe944 @max=5, @min=-5, @val=5>
半分くらい実装したんだが、いわゆる「整数コンテナ」だと気付いたのでやめた 整数を入れる入れ物クラスは作ってはいけない
このスレが過疎ったのは俺が質問してないから この板で延びてるスレはたいていおれが質問してるから 俺を探すなら伸びてるスレをチェックしたらよい
271 :
192 :2011/06/20(月) 16:13:40.99
楽しいRuby3で勉強しているのですが、require でライブラリを呼び出したいのですが、本通りにうまくいきません。 実行ファイルの保存場所とかに問題があるのでしょうか?
require "./なんとか" で、なんとかならない?
273 :
192 :2011/06/20(月) 16:40:46.95
>>272 ありがとうございます。いままでずっとうまくいかなかったんですが、
不思議となんとかなりました。
274 :
デフォルトの名無しさん :2011/06/20(月) 16:48:28.98
たのしいRuby 3版は1.8と1.9の両対応らしいのだが、
LOAD_PATHの仕様変更についての言及はないのだろうか?
>>192 が気付けなかっただけだろうか?
1.9ではなく1.9.2からの仕様変更だったかと 初心者がハマるのも無理は無い
276 :
192 :2011/06/20(月) 16:52:07.12
続けて質問なんですが、
open-uri-sample.rb
require 'open-uri'
open("
http://www.ruby-lang.org/ja/ ") do |f|
5.times do
print f.gets
end
end
と、うちこんで実行した場合に、出力された日本語が文字化けしてしまいます。
ruby-Ks open-uri-sample.rb と入力しても文字化けしたままでだめでした。
解決方法はありますでしょうか?
277 :
192 :2011/06/20(月) 16:57:02.21
>>274 ファイルの場所を移動させたり、GEMをダウンロードしたり
いろいろやっていたら、いつのまにかうまくrequireがうごくようになりましたが原因を理解していないので
LOAD_PATHの仕様変更調べてみます。本にはのってないようです。
ありがとうございます。rbuy 1.87のruby consoleをつかっています。
>>274 >たのしいRuby 3版は1.8と1.9の両対応
ちょっと違う
1.8.7 と 1.9.1 の両対応だ
>>276 なんかいろいろめんどくさいな
えー、Ruby1.9.xのopen-uriはレスポンスヘッダのcharsetを読んでString#force_encodingする
http://www.ruby-lang.org/ja/ のレスポンスヘッダのContent-Typeは
Content-Type: text/html;charset=utf-8
なので、戻り値の文字列は force_encoding('UTF-8') されている
つまり、そこで print した文字列 f.gets は UTF-8 だ
スクリプトの実行結果を UTF-8 表示できる手段に通すか、
スクリプト側の文字列表示時に、たとえばWindowsのコマンドプロンプトなら
print f.gets.encode('Windows-31J')
と書く
UTF-8から変換する時は、エラー出さないように変換オプション も渡したほうがいいと思う
281 :
192 :2011/06/20(月) 18:15:26.68
>>279 >>280 ありがとうございます。いろいろ試していたのですが、まだ文字化け解消しません。
print f.gets.encode('Windows-31J')と書くとありますが、実行ファイル内に書いてみたり、
ruby print f.gets.encode('Windows-31J') openuri-sample.rb と書いて実行してみたりしたのですが、うまくいきません。
ruby consoleをクリックすると出てくるWindowsのコマンドプロプントを使っています。
基本的なコンセプトとして、インターネットは魔境なので、不用意に接続してはいけない インターネットそのもの(ってなんだ)を扱うのでない限り、サンプルにするのは極めて不適当 そういう意味で、OpenURI#read は本の真ん中へんくらいに出てくる技術 文字列とはなんぞやとか、メソッドとはなんぞとか、文字エンコーディングの違いってなにとか、 そういうことはそれなりに理解している人が使う ということで、まだ早い
>>282 の
>そういうことはそれなりに理解している人が使う
には賛同なのだが
# open-uri ライブラリを読み込む
require 'open-uri'
#
http://www.ruby-lang.org/ja/ に接続し、
# なんかreadとかgetsとかできるオブジェクトをブロック引数 f に
open("
http://www.ruby-lang.org/ja/ ") do |f|
# メモリはだいじなので古式ゆかしく5回getsを繰りかえして文字列を取得
5.times do
# 接続結果のオブジェクト(IOオブジェクト)のgetsメソッドが返す「改行までの文字列」をprintする
print f.gets
end
end
という流れだとわかってもらえてないとわりとつらい
んで、文字列を返す f.gets が返してるものが UTF-8 になってて、これをそのまま print している
Windows のコマンドプロンプトは UTF-8 をまともに扱えないから、
print する文字列を「コマンドプロンプトが表示できるような文字列」にしなければならない
これは今のところは単に文字エンコーディングの違いに起因するもので、
コマンドプロンプトでは(Ruby1.9のEncodingがサポートしているエンコーディング名称中では)Windows-31Jの文字列なら
きちんと日本語として表示できる
ということで、f.gets の戻り値を String#encode で変換する
変換されていない文字列はなにをどうやっても化けるので、残しておいてはいけない
require 'open-uri'
open("
http://www.ruby-lang.org/ja/ ") do |f|
5.times do
print f.gets.encode('Windows-31J')
end
end
encode に :invalid => :replace, :undef => :replace は必須だろう
>>285 必須だと思うならデフォルト値にしとけカスって言っとけ
IOのエンコーディングにinvalidとかのオプションってどうやって渡すの?
>>287 それはできない
…うん、できないはず
それをやる方法を探したのでおぼえてる
不便やねー
>>285 わけもわからず抑制型オプションつけさせるのって嫌いなのよね
説明してあげてください
エラーが出てくるだけで何もうれしくないぞ
292 :
デフォルトの名無しさん :2011/06/20(月) 21:10:58.49
#!/usr/bin/ruby require 'find' DIR1= ["/ruby/", "/ruby_doc/", "/ruby_tools/"] IGNORES = [ /^\./, /^CVS$/, /^RCS$/ ] DIR1.each do |path| Find.find(path) do |p2| if FileTest.directory?(p2) # pathがディレクトリならば dir, base = File.split(p2) IGNORES.each do |re| if re =~ base # 無視したいディレクトリの場合 Find.prune # それ以下の検索を省略する end end end if File.basename(p2) =~ Regexp.new(ARGV[0]) #エラー puts p2 # 出力する end end end Exception `TypeError' at dirlist.rb:17 - can't convert nil into String でエラーになります。 正規表現でファイル検索する。検索する複数ディレクトリと 検索しない除外ディレクトリをプログラムで解決したいです。 どうすればいいのでしょうか?
293 :
192 :2011/06/20(月) 21:25:13.67
>>284 ありがとうございます。みなさんもありがとうございます。
いまだにできていませんが、実力不足なので、ゆっくり自分で解決できるまでがんばります。
Regexp.new を使う人がいるのはなぜだろう っていうか、誰が広めてるんだろう #!/usr/bin/ruby # -*- coding: utf-8 -*- if ARGV.empty? raise "Needs ARGV" else @target = /#{ARGV[0]}/ end require 'find' @dir1= ["/ruby/", "/ruby_doc/", "/ruby_tools/"] @ignores = [ /^\./, /^CVS$/, /^RCS$/ ] @dir1.each do |path| Find.find(path) do |p2| if FileTest.directory?(p2) dir, base = File.split(p2) # 無視したいディレクトリ名にヒットしたらサブディレクトリを検索しない Find.prune if @ignores.any?{|re| re =~ base} end puts p2 if @target =~ File.basename(p2) end end
296 :
uy :2011/06/20(月) 21:37:47.03
かなり意味不なんだけど、Dir[]を知らずにそれをかいてるわけじゃなくて Dirではかけずにかいている? Dir["{ruby,ruby_doc,ruby_tools}/*.*"].each do | m | if m =~ /(test.*)/ p m end end たぶんエラーの原因は、引数から受け取ったARGV[0]はRegexpじゃなく文字列だからそのまま評価するんじゃなく eval等をしないとしぬ
>>295 俺一時期、なんでもかんでも明示的に書きたがった時期があって、
Regexp.new 使いまくってましたね。
Regexp.newはキャッシュされないから遅いし、 かなり有名な記法である /re/ のほうがよっぽど明示的だ
299 :
デフォルトの名無しさん :2011/06/20(月) 22:47:02.94
>>295 さん
>>296 さん
素早いコメント有難う御座います。
Regexp.new古い本は当たり前のように書いてあります。
ここ数年の新しい本も最初の方にありますね。
せっかくですのでどなたかRegexp.newを書き換えよう!みたいなサイトを
ご紹介いただけると幸いです。
そりゃ書いてはあるだろう しかし使ってはいない Array.new のようなもの
%r!regexp! %w(a b c) 123_456 オレは、はじめての言語が Java なんだけど こういう書き方を使ったときはドキドキした
Ruby においては、リテラルで書ける場合はリテラルで書いたほうがおおむね爆速 str = String.new ではなく str = "" と書く arr = Array.new ではなく arr = [ ] と書く もし data = [] と data = {} で data がどっちなんだかわかりにくいのだとしたら、 そりゃ変数名が悪いんだよとか言っておく 正規表現においてはオブジェクト使い回しが効く場合はリテラルのほうがバカ速い 変数埋め込みしかない場合は Regexp.new(val) も /#{val}/ も同じか、リテラルのほうが微妙に遅い
Pythonで任意の二つのキーを一組としたハッシュを配列にして、そこにデータを追加したい 場合、タプルを使って次のように書けます。 from collections import defaultdict hash = defaultdict(list) hash[('a', 'b')].append('111') Rubyはタプルがないと思いますが、こういう機能を実現するにはどうすればいいでしょうか? 見通し良く実装できる方法があれば知りたいです。
304 :
291 :2011/06/21(火) 00:27:03.39
305 :
292 :2011/06/21(火) 00:31:49.49
すいません。304は名前欄間違えました。292です。
タプルなんて必要ないだろ。 リストがあるんだし。リストをキーにしたハッシュにすればいいんじゃね?
308 :
デフォルトの名無しさん :2011/06/21(火) 00:53:42.93
Pythonにリストとタプルがある点は賛否両論だったなぁ。 需要はわかるんだが。
タプルは要素の変更ができないからhashのkeyにできる。listはキーにできない。 Rubyも同じでしょ。上のようなコードはrubyじゃ無理じゃないかな。試してないけど。
310 :
デフォルトの名無しさん :2011/06/21(火) 01:02:11.00
freezeされた配列かStructを使うのかねぇ。
複製して凍らせたのをキーにすりゃいいかね
>>309 Rubyはそういう制限ないよ
PythonはイミュータブルじゃないとTypeErrorだけど
>>312 なるほど。
キーの内容が変わっちゃっても問題ないのかな?
Pythonのtupleの説明で、変えられないのがtupleの利点、ってのを読んだことがあったんだけど。
そんな制限はほんとは必要ないってことなのかな? わざわざ独立データ型とするほどの。
314 :
デフォルトの名無しさん :2011/06/21(火) 01:15:57.60
irb(main):001:0> hash = {} => {} irb(main):002:0> key = [1,2,3] => [1, 2, 3] irb(main):003:0> hash[key] = :value => :value irb(main):004:0> hash => {[1, 2, 3]=>:value} irb(main):005:0> key[2]=300 => 300 irb(main):006:0> key => [1, 2, 300] irb(main):007:0> hash => {[1, 2, 300]=>:value} irb(main):008:0> hash[key] => nil ↑ふしぎ!!
315 :
デフォルトの名無しさん :2011/06/21(火) 01:26:42.87
あぁ、Object#hashの戻り値が変わったからか。 ふしぎじゃなかった!
316 :
uy :2011/06/21(火) 01:27:07.57
require 'rinda/rinda' n = Rinda::Tuple.new( [44,55,66] ) c = { n => :test } p c[n] p n.value n.value[2] = 88 p n.value p c[n]
よし誰かコミッターにたのんでタプル追加してもらおう
318 :
uy :2011/06/21(火) 01:32:48.14
[]も{]も使われててタプルをあらわす記号なんてあまってネーよ 記号を増やすべき
2011/06/21(火) 16:58:27.65 - 2011/06/21(火) 16:51:27.65 を計算する方法を教えてください
すいません途中で送信してしまいました 2011/06/21(火) 16:58:27.65 - 2011/06/21(火) 16:51:27.65 を計算すると秒が求められるのですがそれを1:30:20(時:分:秒)にする方法を教えてください
あ、それできないんよ
323 :
デフォルトの名無しさん :2011/06/21(火) 17:34:56.77
そういえばTimeSpan的なクラスはないな。 計算するだけなら60で割って60で割ってだけど。
日時が英語でdata timeなんだから、 日クラス Date 時クラス Time 日時クラス DateTime(現行のTimeクラス) にしたらよかったのにな。
それはいかがなものか
なんで、いいじゃん。おれとしては Dateインスタンス + Timeインスタンス で DateTimeインスタンスを返してほしいな
女の子とのデートタイム
モテない教祖を持つと信者が苦労する典型w
>>329 Matzうらやましい。超うらやましい。けしからん
>>324 TimeとTimeSpanの2つでいいんだよ
Timeを大きくしたくなかったから分かれてしまったけど、実用上は失敗だと思う
拡張TimeとDateとDateTimeとParseDateは require 'time' 一発で読まれて、Timeクラスの拡張として振る舞うべき
def timespan(end_time, start_time)
require 'time'
t2 = end_time.kind_of?(Time) ? end_time : Time.parse(end_time)
t1 = start_time.kind_of?(Time) ? start_time : Time.parse(start_time)
Hash[*%w(sec min hour day month year).zip(t2.to_a[0..5].zip(t1.to_a[0..5]).map{|a| a[0] - a[1]}).flatten]
end
def timespan_to_s(end_time, start_time, format='hour:min:sec')
str = format.dup
timespan(end_time, start_time).each{|name, value| str.sub!(/#{name}/){value}}
str
end
t2, t1 = '2011-06-22 08:23:45', '2011-06-22 07:00:00'
p timespan(t2, t1) #=> {"month"=>0, "hour"=>1, "day"=>0, "sec"=>45, "year"=>0, "min"=>23}
p timespan_to_s(t2, t1) #=> "1:23:45"
puts timespan_to_s(t2, t1, 'hour時間min分sec秒') #=> 1時間23分45秒
自分の娘が踊ってみたとかいってyoutubeに動画をあげてたら、 たぶん怒り狂ってこの世の全てのルートサーバを破壊しつくすと思う。
>>331 引き算の配列を Time.local に渡せば strftime('%H%M%S') が使えるんじゃなかろうか
>>333 それは「2ヶ月と30日」とかを投げると2月30日になってエラーになる気がするのでやめた
日数までなら平気なんだけど
1970/2/30とかになるんだろう。そういや自作スクリプトで分と秒は出るのに時間が出てなかったな。 もう一回60で割ればいいのか?
>>336 bizinformation.orgは適当
客観的根拠はとくにない
本気にしたらどうすんだ、馬鹿野郎
1月31日の1ヵ月後の1ヶ月前は何月何日?
そんなのお前が決めることだ
>>340 >1月31日の1ヵ月後
は、2月の末日(民法143条の2)
>1月31日の1ヵ月後の1ヶ月前
は、1月28日(29日)か、1月31日
通常は期間だけを計算したあとにおもむろに適用するので、0ヶ月を適用して1月31日
コンピュータで順番に計算すると一般的な答とは乖離する例
WindowsのコマンドプロントからUTF-8のwebサイトの内容を取得して表示するときは ファイルの先頭に # coding: Windows-31J $stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8) とかいておけばいいですか?
使うライブラリによるんじゃないの
IOでの変換は、オプション指定できないみたいだから、変換できない文字があるとエラーで止まっちゃうでしょ。 だからputs str.encode(Encoding::Windows_31J, :invalid => :replace, :undef => :replace) みたいにしないといけないんじゃないの? やってることが1.8から進歩してないが、設計ミスのような気がしてならない。
>>344 それの存在は忘れろ
二度と使ってはならない
ああ、最初にそれ持ち出した奴ぶん殴りたい
いわゆるグローバル変数でもあるしな だから puts 等のそばに記述されるべきだが、 それだったら puts のときに文字列を String#encode したり File オブジェクトのエンコーディングを変更したりするほうが素直だ puts str と open('kekka.txt', 'wb'){|f| f.puts(str)} が出力する文字列違うというのもキモい そりゃこのへんも統一的に指示できれば美しいが、世界がそのようにはなっていないので…
>>344 Ruby 1.9 の文字列(String オブジェクト)は2つの情報がセットになってる
実際のバイナリ列と、文字エンコーディングの名前
String#encode(to) または String#encode(to, from) はバイナリ列を from(かselfの文字エンコーディング名) から to に変換し、名前も to に変更する
String#force_encoding(new) はバイナリ列は変更せずに、文字エンコーディングの名前の情報部分だけを new にすげかえる
String#encode または内部でそれを呼んでいるメソッドにおいては、
変換元の文字エンコーディング名(と変換先の文字エンコーディング名)は明示的に指定されなければならない
「まったくわけがわからない」不明な文字エンコーディングの String の encode メソッドを使用することはできない
で、通常、Net::HTTP を使用して Web サーバから取得して作成された文字列の文字エンコーディングは不明(ASCII_8BIT、別名BINARY)だ
人間が人力で、なんからの信頼できる情報源から文字エンコーディングを確定して、
変換前に String#force_encoding してやるか String#encode の第2引数に指定してやらなければならない
ということで、
html.force_encodeing(HTMLの正しい文字エンコーディング)
str = html を「HTMLの正しい文字エンコーディング」名義でどうにかする(正規表現とか)
puts str.encode('Windows-31J') # コマンドプロンプトに表示したい場合
というのがたぶん妥当
日本語限定で、あらかじめ文字エンコーディングがわかっているサイトを巡るのではないのなら、
HTML を NKF.guess してしまうのがいちばんめんどくさくない気はする
とまあ眠い目の中ここまで長文書いて、元レスの HTML は UTF-8 限定だということに気がついた
取得した HTML の文字列が UTF-8 であるのなら、UTF-8 から Windows-31J への変換でいいんじゃないのかね
変換エラーでおっこちるようなら
>>346 か、require 'kconv' して tosjis でも使っとけ
つまりどういうことです?
1.9は失敗作
ああ来月待つみたいなリテラルは欲しいな。 month++; みたいなw
正直2.0の完成度を高める為なら、1.9.9xxとか900回以上リリースしまくってもいいとは想うw
1.9.9563519とかになるのか
6月30日の1ヵ月後ってドメインによっては7月30日だったり7月31日だったりするんだろうか?
>>355 6月30日の「1ヶ月後」はフツーのグレゴリオ暦使ってれば常に7月30日
ユリウス暦とか太陰暦とかインカ暦とか使ってる場合はたぶんなんか適当に計算されるんだろう
どちらにしても、「月の部分に1だけ足して、その月に存在しない日になったらその月の最終日に丸める」という処理は一般的だと思う
そういう処理をしてもらっては困る場合は「31日後」などという表現を使う
うむ 6月30日に1日足した結果の"6月31日"は7月1日に変換されなければならないけど、 5月31日に1ヶ月足した結果の"6月31日"は6月30日に変換されなければならない プログラム中の中間データとしては全く同一であるはずなのに このめんどくさい処理をなんとかするために、Date クラスは Date#>> を作った irb> p (Date.parse('2011-05-31') + 31).to_s "2011-07-01" irb> p (Date.parse('2011-05-31') >> 1).to_s "2011-06-30" 「1ヶ月」という期間を加算減算したい場合は >> と << を使ってねという話
gemライブラリにそこそこの変更を入れてみたんだが、テストでエラーが出なかった どうやらこの部分の単体テスト自体がなかったらしい ぬう、変更前のテストから作れということか めんどくさいのう
Rubyってツリーを扱いたい時ってどうしたらいいの? こういう抽象化しにくいのはやっぱり自分でかいていくしかないの?
ないだろ。 ちょっとした用途ならArray/Hashの入れ子程度で賄われるし ちょっとどころでない用途ならREXMLみたいに 解きたい問題に特化した構造で作り込まれるだろうしで。
Wikipediaで見たRubyサンプルコードに ->(x){(略)} ってのがあったんですが、リファレンスのどこに書いてありますか?
>>361 Ruby1.9のlambdaかProcのとこに書いてあるかもしれない
そこにはありませんでした。 Rubyで使われる記号の意味にありました。
>>362 あぼーんアピールを繰り返すにはまだ間が空いてない
windows ruby1.9.2と相性良くて初心者でもいけるxmlライブラリってありますか? rexmlが難しかったので
XMLで何をしたいの? DOMやりたいなら現状REXML以外にメジャーなものはなかったと思う。 htreeは日本語のチュートリアルとかざっと探してもなさそうだし初心者だと難しいかなぁ。
実行した時間をxmlに記録していきたいのです
書くだけならライブラリも何も無くていいんじゃない? ライブラリは主に解析とかパースに使うもんだと思ってる
質問です。2^N次アダマール行列をシルベスターの生成法[*1]により生成するコードを書いてみたのですが、エラーが出て実行出来ません。書いたコードは以下の通りです。
#プログラム hadamard.rb Ver.0.1
N=4
require 'matrix'
class Matrix
def []=(i,j,x)
@rows[i][j]=x
end
end
h=Matrix[[1,1],[1,-1]]
if N>1 then
for k in 1..N-1 do
for i in 0..2**k-1 do
for j in 0..2**k-1 do
h[i,j+2**k]=h[i,j]
h[i+2**k,j]=h[i,j]
h[i+2**k,j+2**k]=-h[i,j]
end
end
end
end
p h
Matrixクラスを使うに当たってリファレンス[*2]を参照し、要素に数値を代入するメソッド定義のコードをコピペしました。
実行時に出てきたエラーメッセージは以下の通りです。
D:/ドキュメント/プログラム/Ruby/rbEA75.tmp:11:in `[]=': undefined method `[]=' for nil:NilClass (NoMethodError)
以下省略
実行環境はVista 64bit、ActiveScriptRuby[3]、RDE[*4]です。
[]=メソッドが定義されてねぇぞ(゚Д゚)ゴルァ!!と言っているように見えるのですが、よく分かりません。よろしくお願いします。
[*1]
http://ja.wikipedia.org/wiki/アダマール行列 [*2]
http://www.ruby-lang.org/ja/man/html/Matrix.html [*3]
http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/ [*4]
http://homepage2.nifty.com/sakazuki/rde/index.html
class Matrix def []=(i,j,x) p i , j , x p @rows @rows[i][j]=x end end これで、表示させてみたところこうなった 0 2 1 [[1, 1], [1, -1]] 2 0 1 [[1, 1, 1], [1, -1]] @rous[ 2 ][ 0 ]にアクセスしようとしたけど @rousは [ 0 ] と [ 1 ] しかまだ持ってないからエラーでてる Matriksが何のライブラリで何をするものか俺しらんのでイミフだけどこうすりゃ一応うごく class Matrix def []=(i,j,x) if @rows[i].nil? @rows[i] = [] end @rows[i][j]=x end end
もう見るまでもないな Rubyには2次元配列は存在しない 単なるメソッドチェーンに過ぎない foo[x][y] としたとき、実際に試されるのは foo の x y 番地ではなく foo[x] が返すオブジェクトの [y] だ foo[x] の時点で整数や nil であるとき、 foo[x][y] は 3[y] や nil[y] を試そうとして NoMethodError を発生させる
N = 4 for k in 1..N-1 p k end ちなみに↑と↓は同義な、 ifのthenやforのdoも省略可能 for k in 1...N p k end
ありがとうございます、
>>373 さんの説明でわかったような気がします
ようするにMatrixは配列の配列を作っているだけなので
N×N行列hの(i,j)成分に対して,行と列をそれぞれ二倍に拡張して2N×2Nの行列にするとき
h[i,j+2**k]は配列オブジェクトh[i]がすでにあるので大丈夫だけど
h[i+2**k,j]は配列オブジェクトh[i+2**k]が無いのでこれを
h[i+2**k,j]=[]として作ってやらないとアクセスできない
そのあと
h[i+2**k,j+2**k]にアクセスするときは上で配列h[i+2**k]が作られているのでアクセスできる
というところでいいんでしょうか?
いままではPASCALでやっていたので最初から扱う最大の次数の多次元配列をつくっていたので問題はでなかったのですが
Rubyだと宣言なしで動的に使えて、いきなり配列の中のぶっ飛んだ成分にアクセスできていたので、同じことが行列でもできるだろうと油断していました ・・・
doやthenは省略できるみたいですが、これって省略するのが普通なんでしょうか?
とりあえずちゃんと書いた方がいいと思って書いたのですが
上ではputs hと書いてしまいましたが本来ならちゃんとカッコをつけた方がいいんでしょうかね
オブジェクト...オブジェクト で終端を含まない範囲オブジェクトを作れるのは知りませんでした・・・参考になります。
>h[i+2**k,j]=[]として作ってやらないとアクセスできない
あい
これを自動で作る方法はなくもないけれど、とりあえず自分で条件つけて自分で書いて作るのが安心確実かと思う
こんなとこに魔法使っても得しないw
do や then はあまり省略しないというか、省略ではなく「do や then を書くか、改行を書くかのどちらか2択」だ
Ruby の条件部は空白が許されていて、どこまで続いてるのか書き忘れがないのかがよくわからないので、
if(条件) のような区切り書きの役目を if 条件 then に負わせることがよくある
「アタマイイヒト」はなんでもかんでも省略して空白区切りにまかせて書くけど、正直推奨しない
あと、puts と print と p は伝統的に誰もカッコ書かないというか、下手にカッコ書くと時々妙に見える動作をする
>オブジェクト...オブジェクト で終端を含まない範囲オブジェクトを作れるのは知りませんでした
読めればそれでいいよ、あんまり自分から使うもんじゃない
理由は、まあ、見たまんまだなw
>>374 みたいなのは参考にしたらだめこ
推奨って「 誰が 」 言ったのか詳しく あまりこのスレでは口出ししないようにしてきたが流石に 変なこと教えんな いや、自分の考えを押し付けるなと。 Rubyを何の用途に使ってたらいちいちdo、thenつけるんだよ 複数行に分けてるにもかかわらずthen doつけるなんてそうそう見た事ねーよ 教科書コードとしても微妙 無駄に冗長させるだけ、そもそもifを一行でかくなら後置きIFにする そうすることで thenとendと空白をあわせて 9文字くらいタイプ量を減らせるんじゃないのか もう一度いう、 推奨って「 誰が 」 言ったのか詳しく とりあえず標準Libのソースコードで語るなら if thenはやってる箇所はあったけど、for doについては、やってる箇所はひとつもないよ
多次元配列でやりたい大抵のことは配列の配列にメソッドチェインで事足りる。 内部配列が見えない真正の多次元配列が欲しけりゃそういうクラスを作れば十分で、 「Rubyに多次元配列は存在しない」とドヤ顔するほどのことでもない。
>多次元配列でやりたい大抵のことは配列の配列にメソッドチェインで事足りる つまり多次元配列は存在しないってことだろ 「配列の配列」と「多次元配列」はぜんぜん違う
そこまで言って両者の定義を示さないってすごいな
たとえぜんぜん違っても使うときには大して違いを気にしなくていい程度の使い方しかされない だから「つまり多次元配列は存在しない」とドヤ顔するほどのことでもない。
配列の配列はただのネストした配列で、隣りに誰がいるかとか、自分がどこにいるかとかを全く知らず、self と自分の関係しか知ることができない 多次元配列は self にすべてを問いあわせることができて、self は全ての番地を知っている こんな感じ? 違うっちゃ違うな
>>382 作った配列の筋に依存するというのも結構…
てか、Ruby における配列の配列は配列の配列としてしか使用されてないはず
配列の配列を2次元配列として使っているとしたら、それは単に間違い
でも大学の授業でよくあるが
arr[1][3] は arr[1] の [3] であって、それ以上でもそれ以下でもないなあ… 配列が配列の中に入ってたら、それはネストした配列だろ 配列オブジェクトの(要素の)中に、また別の配列オブジェクトがごろんと入ってるだけ むしろ、なぜわざわざ二次元配列だと考えるのかが謎だ
他言語(Cとか)だと2次元配列のほうが簡単に書けるからそれを意識しちゃうんでしょ
・ 配列オブジェクトというものをまったく意識しない ・ eachによる自己枚挙の利点がよくわからず、for で添え字アクセスばかりする ような時期だと、ネストした配列と言われても何言ってるのこの人みたいにしか聞こえないと思うの なまあたたたかく見守るべき
てゆーか、 こんだけ広まってるってことは、 オブジェクトやイテレーションの概念を 知 ら な い く せ に a[0][1] のようなC/PerlちっくなアクセスのやりかたをRubyでやるように教えたアホがいるってことだよね、要は それが広まってるんだ 彼らは被害者に過ぎない
多次元配列ないのと、 ListなのにArrayって名前付けちゃってんのはRubyの欠点だから
PASCAL・C・FORTRAN教育の被害者だというのには同意はしておく だからRubyとしての扱い方を知ってもらわないといけないんだが 「多次元配列は存在せず、ネストした配列かMatrixクラスで代替するしかありません」 というシンプルな事実を頑なに認めないのは単に老害の第一歩 次の方どうぞん
低性能でエネルギーを過剰に浪費し、 温暖化を促進し人類を滅亡に導くってのはRubyの欠点だから
NArrayもあるけど、使ったことないな
京都議定書がアメリカも参加した状態で守られたりしたとしても 2100年の平均気温上昇が0.15度抑えられる程度の効果しか無いけどな
Rubyについてスレが建たないのでRubyはオワコンだと判断しました
誰か Rubyについて Part 44 を立ててください。
くだすれぴちょんスレ(仮名)も立ってないのでおあいこです
>>375 Matrixは行列を動的に拡張するような使い方は想定してないと思うよ
そこで定義してるMatrix#[]=はあくまで既存の成分の参照
多次元配列が使われるパターンの多くが配列の配列で困らないから多次元配列が用意されていない。 「どうしても真正の多次元配列が欲しいときは自分が必要と思う機能を持たせたクラスを作ってね」
よし本スレ立ててくる。失敗するかもだけど
>>389 >多次元配列は存在せず
これはいいけど、
>ネストした配列かMatrixクラスで代替するしかありません
自分が必要なクラスを自分で書くっていう発想がないのは頭がおかしいから?
いちいちかまっていたらキリねーよ 必死な子が混ざってるのは質問の回答2〜4レス目から気づいてるけど、スルーしたほうがいい
uyにいわれたらおしまいですね。
>>401 このスレの全部に「自分で作れ」をつけて回ってください
>>404 『しかありません』
自分で作ることもできるし、ライブラリもあるんですけど
>>404 言語側で用意されてなくて、代替じゃだめで、既存ライブラリもいや、という条件が揃ってるならつけて回るかな。
YES → 【他で代用可?】 ─ YES → そうしろ死ね / \ 【本当に必要?】 NO → 【ライブラリある?】― YES → それ使え死ね \ \ NO → 死ね NO → 自分で作れ死ね 言語仕様上存在しないものについての話題ではこういう流れが自然であって、 「存在しない」「存在しない」とオウムのように繰り返すのは意味がないよね。
顔真っ赤にして必死で探した「相手のミス」が「作れるって書いてない!!」というのは情けなくて涙が出る
rubygemからnokogiriをインストールしたのですが require 'nokogiri' でnokogiriがno such file to load -- nokogiri (LoadError)となり、うまくいきません。 Nokogiriがうまくインストールされてるかどうかは ruby -rrubygems -e 'require "nokogiri"; p Nokogiri::VERSION' で確かめると"1.46と表示されます。 どの辺をチェックすればうまく使えるようになりますでしょうか?
ついに「顔真っ赤」とか「情けない」とか人格攻撃しかできなくなったのね。 大抵代用可能 ライブラリあり 作るのに甚大な労力が必要なわけでもない
gem which nokogiri
>>409 のこぎり使ったことないから知らんけど
require 'rubygems'
require 'nokogiri'
じゃないの
入れ子配列と多次元配列が本質的に全然別物だろうが、 多次元配列が使われている多くのパターンが入れ子配列で代用可能であるという事実はゆるがないし、 その代用じゃ効かないときのためにNArrayなんてライブラリがあるのも確かだし、 代用もイヤ、既存ライブラリも不満、というときには「じゃあ自分で作れよ」と答えるのが普通だろう。 「Rubyに多次元配列は存在しない」なんて無意味なことをいう必要もないし、 「ネストした配列かMatrixクラスで代替するしかありません」なんて嘘をつく理由もない。 Rubyスレで「二次元配列使いたいんですけどー」とか言われたら ・それ配列の配列じゃダメ? ・NArrayでも使えば ・内部に一次元配列もって[x+y*width]でアクセスするクラスでも作ればいい 幅が固定じゃないならそんときの処理は自分で適当に用意しろや なんて答えるのがまともな人間。 「Rubyに2次元配列は存在しない(ドヤっ」
どうか宿題スレも誰か立ててください。
スレ名: Rubyの宿題教えてください。3限目
↓テンプレ1
--
あなたが解けないRuby言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
前スレ
http://hibari.2ch.net/test/read.cgi/tech/1200175247/ 【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] バージョン: (Ruby 1.8.6 等)
[3.3] 言語: (Ruby/JRuby/IronRubyどちらでも可 等)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
415 :
414 :2011/06/25(土) 17:18:15.93
416 :
409 :2011/06/25(土) 17:30:14.93
>>412 なんてお礼を言ったらいいかわかりませんが、できました。
3日間ぐらい、いじくり倒してできなくて泣きそうだったので、感激です。
大変ありがとうございます。
require 'rubygems'といれることにまったく気づきませんでした。
いっそのこと配列添え字を文字列にしてハッシュテーブルに値ぶっこんどけばいんじゃね
最近の学校ではRubyの宿題なんて出るのか センター試験の数学でもRuby選択できるようになるのかな?
>>420 >>421 ありがとうございます。ソースのvalueの部分でEUC_JPを確認できました。
しかしながら、うまくできませんでした。
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require "kconv"
#! ruby -Ke
doc = Nokogiri::HTML(open(
"
http://table.yahoo.co.jp/t?s=998407.O&g=d "),nil,"euc")
doc.css("title").each do |title|
puts (Kconv.toeuc (title.text))
end
と書いていますが、文字化けしてしまいます。EUC_JPの記述あっていますでしょうか?
423 :
422 :2011/06/25(土) 21:35:23.37
違うやり方探してみます。
>>422 urlの行 "euc" => "EUC-JP"
ruby -Keの行があるけど1.8系をLinuxとかで使ってるの?
425 :
422 :2011/06/25(土) 23:22:26.94
>>424 ありがとうございます。下記コードで無事日本語表示できました。
win7のコマンドプロプント使っています。
ruby -KeはEUC−JPの頭文字eを付けてみたのですが、関係ないみたいですね。
紛らわしくて申し訳ないです。
あとwin7のコマンドプロプントはJISなのでputs(Kconv.tosjis(title.text))にしないと
いけないみたいですね。助かりました。
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require "kconv"
#! ruby -Ku
doc = Nokogiri::HTML(open(
"
http://table.yahoo.co.jp/t?s=998407.O&g=d "),nil,"EUC-JP")
doc.css("td>small").each do |title|
puts(Kconv.tosjis(title.text))
end
>>425 重箱だけど
#! の行はファイル先頭に書くのがお作法、その書き方だとただのコメント行として扱われる
あとruby1.9から -K オプションは非推奨
ついでにJISって書くと7bitJIS(ISO-2022-JP)みたい…
SJISとかShift_JISとか(厳密にはWindowsの場合Windows-31J)ね
1.9なら # coding:utf-8 を先頭に書くのおすすめ
同じ人だと思うんだけど、なんでIOオブジェクトなんかを渡そうとするんだろう 文字列を渡したほうが安心確実高利回りなのに
逆じゃないのかぬ
メモリが許すなら、文字列として全部をreadしてから渡すのがいちばん無難で汎用的 内部でgetsとかで一行づつまたは数キロバイトずつ処理してくれることがわかっているなら、 Fileオブジェクトを渡すというオプションがあってもいい Nokogiriはそんなことしないので、open(uri).read したものをぶんなげたほうが話が早い っていうか、Fileオブジェクトがどんな文字列返すのか「不安」にならない? あとエラーとか 多少メモリを占有しても、文字列としてエンコーディングとかサイズとか確定させてから渡したいなあ
ファイルポインタと勘違いしているに手持ちの掛け金全部 C厨はもうほんとに害悪しか撒き散らかさないから困る
>>431 Rubyのファイルオブジェクトをファイルポインタと勘違いしてると
どんな問題が出てくるの?詳しくお願い
>>432 ファイルポインタではないものをファイルポインタと呼んではならない
nokogiriのドキュメントに書いてある通りに使って文句言うとかないわ
そもそも Ruby 上にはポインタないしな… ファイル読み込み開始位置子は別途 File オブジェクトの中に変数として保持されてる てゆーか、なんか「Ruby はあなたの知っている○○言語ではない」というだけのことをなんか妙に拒否してるっぽい人が前からなんか 言語が違うんだから呼び名も概念も考え方も違うというのはあんまりに当たり前のことだと思うんだけど、そんなに難しいかな
世の中結構多いけどね。 最初に学んだ枠組ベースでなんでもかんでも押し通す奴。
>>433 いやそういうことじゃなくて、
Cのファイルポインタと同じ感覚で使ったら事故ったとか
そういう実例があるのなら聞きたかったんだけど
自分は常にファイルオブジェクトって呼んでるよ
そういえば文字列かファイル風オブジェクトを受け取るパーサは 文字列を受け取った場合にStringIOでくるんでからパースしてることがよくある (read, seekが使えるのと読み込み位置を記憶してくれて都合がいいから) そういう場合も考えると文字列渡しとけってのが良い方法なのかは疑問
動作とか利点とか明記したマニュアル書きましょうというお話だな 引数オブジェクトが read 可能だった場合は read して文字列にします、というだけじゃちょっと
csv.foreachとかcsv.openとか使うと csvファイルの1行目から順に読んでいくみたいなんですが、 最後の1行だけ読みたい場合はどうしたらいいでしょうか? すごく初歩的な質問ですいません。 ぐぐっても出てこなくて・・・
IOオブジェクトがopenされている期間は短いほど好ましいと感じてるので、
許されるなら自前でopenしてreadしてcloseした結果の文字列(正しいエンコーディング情報つき)を渡したい今日この頃
文字列をどう処理するのかにもよるから(先頭からエンコーディング確定で順にパースできるなら文字列は二度手間)、
やっぱ詳細をマニュアルに書いて欲しいのは確か
>>441 できません
ああ、またこんな言い方したらネチネチ言う人が出るかな
ファイル全体を一度読んで、最後の行を探さないといけないので、そういう魔法みたいな「軽い」単機能はない
がりっと全部単なる文字列として読み込んでから改行で区切った最後の行をCSVとして解釈したり、
全部をCSVとしてパースし終わってから、最後の行に相当するデータを抜き出したりしてくだち
それこそやろうと思えば適当なファイル位置から最後まで読んで探すこともできそうだけど、そんな回答を望んでるわけじゃないよね
シェルで tail コマンドが使えるなら一発だ
>>442 ありがとうございます。時間食いそうだけど、全部読むしかなさそうです
そもそもデータをcsvで保存したのが間違いな気がしてきました
>>422 自分と同じ道通ってる人がいるみたいですね
あ、大きなファイルである場合は、seekでファイル読み込み開始位置をすっごい後ろに指定してバイト列読んで最終行探してもワリに合うことがあるよ
>>443 のtailがいちばん手軽だけど
Windowsなら仕方がないかな
446 :
デフォルトの名無しさん :2011/06/26(日) 14:05:07.97
CSVは、最後の行だけで最後のレコードを構成できるとは限らんしなぁ。
汎用では無理だが、どんなデータ入ってるか事前に決め打ちできる場合はなんとでもなる
どでかいファイルならファイルのケツからシークして改行さがす 小さいファイルなら一気に読み込んで文字列操作でケツを探す、ってところじゃね ダブルクォーテーションで要素(?)を囲うのがありな場合は ちょいと面倒そうだな
449 :
441 :2011/06/26(日) 14:46:59.44
みなさんありがとうございます csvデータの中身は株価データで 年 月 日 1983 1 4 144 144 140 141 309000 141 1983 1 5 144 155 142 153 2416000 153 1983 1 6 162 168 157 160 7245000 160 ・ ・ 2011 6 8 168 169 167 168 46000 168 2011 6 9 171 173 171 172 291000 172 2011 6 10 177 178 174 175 504000 175 って感じになってます 行数は少ないので1000行多いので7200行ってとこです 最終行の日付読んで 2011/6/11〜今日まで のデータをスクレイピングしてデータに追加するプログラム作るのに 最終行の日付け読む必要があるんですが、 シークして改行探すのがよさげなかんじですかね?
PHPだと$file=file(csvファイルのパス);echo end($file);と簡単に出来るんだけどな
高度な釣りだな
452 :
デフォルトの名無しさん :2011/06/26(日) 14:53:09.12
>>450 それ相当でいいのなら File.read(csv).lines[0] で済むような。
453 :
デフォルトの名無しさん :2011/06/26(日) 14:53:26.71
ぜろじゃねぇ。-1
File.open(csv).reverse_each.first とか?
455 :
441 :2011/06/26(日) 15:04:03.26
あ、あっさりいけた・・・みなさんありがとうございます なんでこれに1時間悩んでたんだろう・・・orz また、つまづいたらお願いします
456 :
450 :2011/06/26(日) 15:20:29.42
457 :
デフォルトの名無しさん :2011/06/26(日) 16:19:21.59
lines(Enumerator)には[]ないな。
なんとなく1.8の頃に書いたコードを1.9で動かしてみたら Stringのエンコーディング不一致でほぼ全滅・・・ しかも1.9に対応させると今度は1.8で動かないし('A`)
python最強
こんな短いやりとりでRubyはおろかPythonも使ったことがないということが露見するという たいへん心温まる出来事でした
まあ、この文脈ではPythonに優位性は特にないな…
>>458 キャラクターエンコーディングに対する理解と実行が不足な状態だった可能性がある
1.9でわかったんだからいいじゃないか
このスレには、お世話になっております。ありがとうございます。
rubyでnokogiriを使ってスクレイピングするには、cssとXPathについて勉強が必要だと 感じましたが、他にこれを勉強すれば、スクレイピングに便利、役に立つっていうようなものなどは ありますでしょうか?
正直とにかく何かやってみるほうが先だと思う。 つまづくところは多分処理する対象によってぜんぜん違う。
ありがとうございます。手当たりしだいやってみます。
最近スクレイピングネタが多いがみんな何やってんだ?
いや別に多くはないだろ
2ちゃんボットでも作ってるじゃないの? 自分の代わりに低能な質問を自動投稿する人工無脳。
>>468 HTMLのパースなんて一切必要ないということがわからないなんて可哀相
>>461 そもそも1.8以前にそんな概念はないだろ。何を言っているんだ?
Ruby1.8以前にはこの世にキャラクターエンコーディングなんて概念はなかったらしい。 それどこの宇宙?
Ruby1.8のStringにキャラクターエンコーディングの概念があった記憶はないなぁ・・・
Stringオブジェクトの属性としては、ね。 それが文字列である以上何らかのキャラクターエンコーディングではあったわけで。
python最強
1.9はエンコーディング周りでバグバグのままスタートしたのが悪かった どこが悪くてエラーが出るのか判断すごい難しかった
元々国際化の実装を回避してリリースしてたのが不味かった。 実際に現場で使われるほどに、日本語環境で問題出まくり出しな。 結局perlと同じ後追いで国際化に取り組む羽目になった。java見たいに内部utf8って決めうちしちゃったほうが楽に乗り切れたと思うよ。
へ―日本生まれだから日本語関係の実装は問題なく開発されてきたのだと思ってた。
内部コードをUTF-8にするのが自然なアプリケーション以外を見捨てるのが楽ならね。
>>477 >元々国際化の実装を回避してリリースしてたのが不味かった。
>実際に現場で使われるほどに、日本語環境で問題出まくり出しな。
具体的にどんな問題があったの?
詳細が知りたいので、リンクがあればおしえて。
ぐぐってみた感じではみつからないなあ。
481 :
デフォルトの名無しさん :2011/06/28(火) 05:19:45.69
ここでバグ報告してどうする
>>479 他の文字エンコーディングからUTF-8に変換するコストが割に合わないのが一因ではあったな
Shift_JIS→内部UTF-8→Shift_JISで文字が欠落するとか、それこそ日本人用としてはありえない
だったらShift_JISのバイナリ文字列として終始扱ったほうがまだマシ
っていうか、Windowsで使える日本語文字はUTF-8ですべて表現できるとか思ってる人がいるっぽい
表現できないぞ
規格上は表現できるはずだったが、ゲートウェイである変換の実際の実装がみんなバラバラで問題が
世の中そんなもんだよね
別に出まくりではないな
出まくりだとしたら、たとえば常態1.8なRailsでも出まくりだということになる
でもそんな話はあまり聞かない
>>480 一応、$KCODEがシステムグローバルであるという問題はメジャーではあった
UTF-8で日本語書いたライブラリと、
Shift_JISで日本語書いたライブラリと、
EUC-JPで日本語書いたライブラリをrequireするとうまく動かない
日本語ならまだしも、なんか適当にラテン文字が書いてあるライブラリなんかだと…
あと、外人さんがライブラリ内部でやたらめったら$KCODE='u'しまくってるという問題も
$KCODE = 's'
require '外人さんライブラリ'
p $KCODE #=> 'u'
みたいなめんどくさいことが昔は(今も)時々ある
484 :
デフォルトの名無しさん :2011/06/28(火) 06:49:56.03
〜
>>482 それってRubyの問題じゃないじゃん
文字コード変換にまつわる数々の問題は
どの言語でも起きるわけだし
>>485 だから、そういう相互変換の問題が身近だったからこそ、1.8も1.9も「内部でUTF-8決め打ち」にしなかったのだろ
理想が高かった分移行がしんどいのはあると思うわ
UTF-8 統一でいいじゃん、という想像力の低い人にとっては、無駄なことを やってるように見える、というのが全てだろ。
さっきからUnicodeをUTF-8と呼び続けているのは 釣りかなにかか
メリケン共にとっては無駄なことをやっている、が全て
491 :
デフォルトの名無しさん :2011/06/28(火) 09:08:10.32
じゃばこの内部表現は16ビットで1文字(キリッの、ほら、なんつったっけ、であって UTF-8ではないよね。
まず訂正。 ×バカなアメ公 ○バカなイタ公 クソコードを投稿(正確にはsvnリポジトリーにコミット)してたのは、イタリア人でした。 でもコードを管理してるコミュニティの親分はアメリカ人で、そいつのチェックでOKが出た上で投稿されたんです。 コードというのは、javaで書かれたプログラムコードのことで、テキストのエンコードのことではありません。 話が長くなるのでアレですが・・・ javaでは内部的に文字列をユニコードで処理しています。1文字は16ビットです。 Windowsも皆さんご存知の通り、内部的に文字列をユニコードで処理しています。1文字16ビットです。 Win32APIの末尾に w が付くやつがそうですね。 つまり、javaで何も考えずにフツーにプログラミングすれば、アメ公が作ってもイタ公が作っても 自動的に日本語対応になるんです。 あとは画面に表示されるメッセージを言語別に作成して、利用者の言語にあわせて切り替える仕組み にしてやれば、マルチリンガルなアプリケーションの一丁あがり!ってワケです。 javaにはもともと、そういう仕組みが用意されてるので簡単です。 ところが、件のバカなイタ公は、文字列を一旦 UTF-8 にエンコードしてから表示しようとするんです。 もちろん文字化けします。バカなイタ公はなぜ文字化けするのか理解できないので 今度はそのUTF-8エンコードされた文字を、javaからWin32APIのWriteConsoleWに渡そうとします。 もちろん文字化けします。バカなイタ公はなぜ文字化けするのか理解できないので 今度はコンソールのコードページを無理やりUTF-8に変更するAPIを使いドツボにハマっています。 何もしなくていい、ただ System.out.println()関数でフツーに表示すればいい、ってのが理解できんのです。 アプリケーションをユニコード対応して国際化したい一心で一生懸命がんばってくれてるキモチはアリガタイwのですがw ユニコードとUTF-8の違いが理解できてないため、まったくトンチンカンなプログラムコードを書いて投稿します。 このイタ公を何とかして退治したいです。イタ公の愚行をやめさせるナイスな文章を教えてください。 コミュニティは英語以外禁止なので英語で構いません。
>>489 Unicodeの話は特にしてないと思うが
Unicode==UTF-8 なんでしょ、彼の脳内では。 CCSもエンコーディングもUCSも知りませーん、ていう。
1.9はいろんなエンコーディング扱えるようにしたが、問題が起こらないようにutf8にしとかないとダメだなという感じ さらにライブラリ中でエラーが出ないようにforce_encodingしまくりで、カオス状態
Windows Ruby1.9系 ファイルの文字コードがShift_JISで、取得するページがUTF-8だった場合 ファイルの文字コードがShift_JISで、取得するページがEUC-JPだった場合 ファイルの文字コードがShift_JISで、取得するページがShift_JISだった場合 ファイルの文字コードがEUC-JPで、取得するページがUTF-8だった場合 ファイルの文字コードがEUC-JPで、取得するページがEUC-JPだった場合 ファイルの文字コードがEUC-JPで、取得するページがShift_JISだった場合 ファイルの文字コードがUTF-8で、取得するページがUTF-8だった場合 ファイルの文字コードがUTF-8で、取得するページがEUC-JPだった場合 ファイルの文字コードがUTF-8で、取得するページがShift_JISだった場合 それぞれ先頭に「# coding: 各ファイルの文字コード」を入れる以外にどのようなことwおするべきですか?
utf-8決め打ちにしなくてもいいけど、デフォルトはutf-8にしてほしかったな coding〜とか全部に書くの面倒なんだが utf-8がデフォルトだと海外でひんしゅく買ったりするのだろうか
>>496 >取得するページ
ネットワークのソケットの IO はローカルのファイルの IO とは違って
常に ASCII_8BIT 固定で取り込むのが普通なのでどうでもいい
取り込んだあとに普通に文字列として必要なだけ変換しろ
あれ、gem のバージョン指定の ~ って使えなくなったんだっけ?
なんかなくなるという話を昔聞いたような、別の話だったような そもそもなんか全然直感的じゃないよねあれ
>>469 なぜ、HTMLのパースは一切必要ないのでしょうか?
スクレイピングで株のバックテストツールなどシストレに使おうともっています。
>>491 > じゃばこの内部表現は16ビットで1文字(キリッの、ほら、なんつったっけ、であって
> UTF-8ではないよね。
重箱の隅だが最小単位が2オクテットってだけで
一文字が2オクテットというわけではないな。
>>494 まあなんでCSIが下火になったかは
Rubyの惨状がわかりやすく示しているというか
>>501 2chはHTML読む必要ないからだろ
datとbbs.cgiとエラーのときの変なページだけ正規表現で読めればいいんだし
何故ASCII_8BIT 固定で取得するのですか?
なんていうか、そもそものアレとして open-uri のメタファは 1.9 で破綻したと思う uri-read とかいうライブラリ名で再出発するといいと思うよ
>>503 世の中にはバカのほうが圧倒的に多いというただの事実がどうかしたか?
むしろ世の中馬鹿ばっかりであることを知りながら 流れにわざわざ逆らって案の定痛い目を見た 「お利口さん」に対する批判というか自虐レスなのでは
もう何が何だか
>>504 2chではということでしたか、ありがとうございます。
こんなとこで嫌み言い合ってないで MLでやれっていう
2011年現在、cgiってperlとrubyどっちが主流ですか?
CGI自体今あんまり流行ってないというか 過去CGIで無理しまくってたのが各技術に散逸したという経緯があって それで流行を言うのもあれなのだが、とりあえず回答としては常にperl Rubyは公開CGIとかはあんまり得意ではない
どんだけリソース使っても我慢できるローカルエリアなCGI(家庭内とか職場内とか)ならいいんだけどねえ 「有料」なサーバで、できる限り多くの人にサービスを提供することが目的のCGIとかは効率あまりよくないわ 「それでもRubyで作ってあることに意味がある」という信念なり差し引きプラスの何かがあるのでない限り普通はお勧めしない PHPとかで作っとけ Rubyでの経験があれば、それなりなものが作れるはずだ
アホな書き込みだな
多言語対応は結構なことだが 1.8用のコードをほぼ全滅させるような実装はなんとかして欲しい force_encodingを書きまくらないと動かない エンコーディングの判定なんてユーザーに任せればいいだろ
「書きまくる」必要は本当はない エラー出る部分だけ対症療法するなら、エラーの数だけ書かなければならないがね
rubyは文字コード関係は弱いね PHPは強いし文字コードで悩むことがほぼない
1.9で作ってから1.8用に書き変えると文字列に関する変更点が極小になる 1.8は適当でも動くので、逆にすると悲惨
1.9は本来の意図通り実装出来てればより簡単になる予定だったはず
…まあ、意外と面倒だったんだから仕方あるまい
1.8 使ったことないよ
現状では1.8を捨てられない以上1.9はお遊びでしか使えないな
過去の遺産のある人が何で初心者スレにいるの?
必死だから
じゃあ初心者に1.9を勧めればいいのか?
とりあえずIOにエンコードの変換オプション渡せないの修正しとくように誰か言っといてよ 早く直しとかないと、アホみたいにASCII_8BIT多用するコードが増え続けるぞ
お前のマシンにはredmine.ruby-lang.orgにアクセスできない呪いでもかかってるのか?
encodeに関してはデフォルトの動作を変えちゃっていいと思うけどな チェックする必要のある人は結局そのためのコード書くわけだし
今年からRuby始めてここでお世話になってる初心者だけど1.8なんて使う気になれない
1.8系使いたくはないけれど、redmine動かすために入れとかなきゃいけない
初心者は1.87だと思ってましたが1、早やいうちに1.9系に変えた方がいいでしょうか?
うむ
>>534 1.8.7でも別にいいよ
1.9が使われてるのでわけがわからなくて困った、というようなことになる可能性は、すくなくとも今年はゼロだろう
来年もたぶん無い
再来年は若干怪しいかもしれないが、1年も使ってたら自力で使いどころの判断くらいできるようになってるはず
ありあがとうございます。今年は1.87でいきます。
まああれだ、来年の自分の伸びしろを信じろ、みたいなそんな感じだなw 1.9.xに関しては、必須も必死もいらない ああ、公開ライブラリ作者にとっては(やっと)必須になってるんだが、まあその程度だ ライブラリ公開できるようなときになってから、1週間くらいだーっと勉強すればいい それ以前の中途半端なRuby知識で1.9対応を開始するとなんかもう果てしないドロ沼にハマるので注意
変なタイミングで変に知識仕入れて勉強すると1.9を嫌いになるよね force_encoding使いまくり
ライブラリが対応してないとどうにもならんし
今の1.9の仕様だと、force_encodingしまくるのが正しいのだぞ
初心者は puts "こにゃにゃちは" からだぞ。 1.8 も 1.9 も変らん
invalid multibyte char (US-ASCII)
544 :
デフォルトの名無しさん :2011/06/29(水) 00:08:47.77
force_encodingが必要なのは境界面だけだと思ったのだが…
どうやればそのエラー出せるのよ?
>>544 その通りだが1.8以前に書かれたコードはそんな事は微塵も考えられていない
結果、エラーを出すところ全てでforce_encodingしまくるか、全て書き直すかの二択を迫られる
初心者には過去の資産はない 業務で使うなら会社でレクチャーするでしょ?
>>547 1.8でも「間違ってる」んだけどな、本当は
たまたま動作してたに過ぎん
Windowsの初心者で、せいぜい Shift_JIS の CSV ファイルの加工するくらいが目的なら 常に文字コードを意識しろ 処理の都度かならずエンコードしろ って言われても戸惑うだろうな
文字コードまわりはプログラミング言語問わず文字コードまわりそれ自体がファッキン
正規表現の文字コードも絡んで複雑怪奇
内部コードが単一なら内から外、 外から内だけ意識すれば良いし それら境界面をいじるような ライブラリを用意する人達は 「わかってる」公算が高い。 今のRubyの場合ワーストケースだと 文字列を操作したり文字列を媒介して 自分が書いたわけではないRubyの モジュールとやり取りする箇所全てで 境界面同様の意識をする必要があると。 そして文字列を読み書きするだけの ライブラリ作者は先の人達に比べれば 「わかってない」公算が高い、と。 となればまあ、美しさを捨ててでも 内部コードを単一化を選んだ各種言語、 各種環境が多いのも当然だよね。 美しさより利用者への優しさを選んだってことで。
さっさとUTF128で統一しろ
uyさんの登場を待っている人がアンチスレにいますよ
しつもんしたいです module A class << self p nesting end module B # p nesting # ←なんでnesting使えないの???????????????????????? end end require "ostruct" a = OpenStruct.new({ :x => 4 }) a.define_singleton_method :ss do p x # ローカル変数だか p y # メンバ変数だか判断できないんですけどォ????????? end a.ss
最近降りて来ないんです
a.ssの中でx=0とかやって混乱してればいいのに
a.ssの中でassignとかうまいことを言う
自分はwindows7のコマンドプロプントをつかっているのですが 下記のようなコマンドを展開しようとすると % tar zxf ruby-dbi-all-0.0.19.tar.gz ’%’は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とでてうまくいきません。これはLinuxとかのコマンドなのかなと想像していますが winのコマンドプロプントの場合はどのように記入したらよいでしょうか?
インストール手順ががらっと変わってくるから windows ruby-dbi でぐぐったほうがいいよ
>>563 ありがとうございます。もう少しがんばってみます。
システムに tar や gzip がインストールされてパスが通っているものと仮定して そのファイルと同じディレクトリ内で入力するのは tar zxf ruby-dbi-all-0.0.19.tar.gz のみでおっけー。パーセント記号は不要
a = (0..10).to_a a.reject! do|m| m==3..m==8 # error # !!(m==3..m==8) end p a これで、 `block in <main>': bad value for range (ArgumentError) ってエラーがでるんだけど、なんで? !!(m==3..m==8) ← こうやってTRUEかFALSEにしておけば通るんだけどォ????
a = { :x =>1 , :y => 55 } puts :each1 a.each do |m| p m end # => [:x, 1] [:y, 55] puts :each2 a.each do |k,v| print k," ",v,"\n" end # => x 1 y 55 puts :reject1 a.reject do |m| p m end # => :x :y # ← ッハァ!? puts :reject2 a.reject do |k,v| print k," ",v,"\n" end # => x 1 y 55 どうして ↓ これで a.reject do |m| p m end # => [:x, 1] [:y, 55] こうなってくれないの???????? eachやmapだけが例外なのォ? 一瞬、このeachはCじゃないとかけないタイプのイテレータか???????って思ったけど module Enumerable def test &block if block.arity == 1 for a in self do yield a end else for a,b in self do yield a,b end end end end a = { :x =>1 , :y => 55 } a.test do |m| p m end a.test do |m,n| p m,n end 普通にかけたんだけどォ??
moduleにinitializeに該当するのってないの?? 一応extendしたときにself.extendedはよばれるけど、所詮、特異メソッドだから @k のスコープが違うんね、だから手動でinit用の関数呼ばなくちゃ def b とかの中で使ってる @k の初期化が不可能なんですけどォ????? つまり、 module A @k = 22 class << self include nesting[1] end def self.a p @k # => 22 end def b p @k # => 44 end def init @k = 44 end def self.extended mod mod.init end Object.new.extend(self).b self.a end puts extend A A.b # => 22 b # => 44 つまり、 moduleで @k とか使っていた場合、A.b と extend後の b で、動作変わっちまうってことなんですけどォーーー???????????w
a = [ [33] , [44] ] p a.map(&:push) #p a.map(&:push , 8) # error # ← 引数渡せないのは仕方のないことなの? というかなんで、Procにしているの? かっこつけないでシンボルにしたらいいのに module Enumerable def test *h method( h.shift ).call *h end end p a.test(:push,[55],5,55,5,5)
shuusei module Enumerable def test *h self.map do |m| m.method( h[0] ).call *h[1..-1] end end end
Ruby/DBIってインストールめんどくさいんだよな
>>565 ありがとうございます。
とりあえずgemを通さずにダウンロードしたものから解凍して
dbiをインストールできました。
irb(main):001:0> require 'dbi'
=> true
となりましたが、その後 require'dbi' ファイルを実行すると
コンピュータにLIBMYSQL.dllがないため、プログラムを開始できません。
この問題を解決するには、プログラムを再インストールしてみてください。
と表示されます。自分のMYSQLが5.5なのが問題のようですが、みなさんは
rubyとDBはどんな組み合わせを使っていますでしょうか?
SQLite でつ
firebird
Windowでしか使わないようなものは秀丸と秀丸メーラーと秀丸ファイラーとjane styleとかなので WinからLinuxに環境を移行したいのですが Linuxをやる上で覚えておいたほうが良い言語ってありますか?
>>573 、574
ありがとうございます。
SQLite使ってみます。
>>575 Cとスクリプト言語ひとつ
あとなぜここで聞く
ありがとうございます ここのスレの先輩方はこの板で一番スキルがあると考えて聞いてしまいました すいませんでした
大事なものを忘れてる 英語の方が役に立つ
580 :
uy :2011/06/30(木) 02:54:33.23
※ スキルが高いのは一人でほかは普通です 何かひとつの言語をやり続ければある程度にはなる 処理系のソースからライブラリのソースまで全て読む もっと上が良いなら好き嫌いせずにすべての言語でそれをやれ
botを作りたいのですが、gemがインストールできません ダウンロードして ruby setup.rb してもエラーが出ます。gem -vで確認すると、ダウンロードしたものはバージョン1.8.5だったのに、何故か1.0.1と表示されます。 このまま gem install twitter としてもエラーが出ます 何故gemがインストールできないんでしょうか??
582 :
581 :2011/06/30(木) 12:32:13.03
ちなみにエラーはこんな感じです ruby setup.rbした場合 ./lib/rubygems.rb:334: warning: parenthesize argument(s) for future version ./lib/rubygems.rb:511: warning: parenthesize argument(s) for future version ./lib/rubygems/dependency_list.rb:8:in `require': ./lib/rubygems/deprecate.rb:53: syntax error, unexpected ',', expecting '|' (SyntaxError) ... define_method name do |*args, &block| # TODO: really works ... ^ ./lib/rubygems/deprecate.rb:54: syntax error, unexpected tCONSTANT, expecting '}' ./lib/rubygems/deprecate.rb:63: syntax error, unexpected kEND, expecting '}' ./lib/rubygems/deprecate.rb:68: syntax error, unexpected kEND, expecting '}' from ./lib/rubygems/dependency_list.rb:8 from ./lib/rubygems.rb:29:in `require' from ./lib/rubygems.rb:29 from setup.rb:27:in `require' from setup.rb:27
1.9ならRubyGemsが組込まれてるから gem update --system でアップデートできるハズ
あ、すいませんRubyは1.8.6です 確か初心者は1.9じゃない方がいいとあったので入れてないんですが、1.9にしないとダメですかね?
cronjobが日本人を拒否した理由 botを作りすぎたから
すでに過去のバージョンがインストールしてあると、gem は(上書き?)インストール できなかった気がする。本家サイトにも 1.1 や 1.2 からのアップデートに不具合が あると書いてあるし。自分は /usr/local/lib/ruby/ 以下にある gem 関係を手動で 削除してインストールしたけど、こればかりは環境によるだろうからお勧めできない。
消す(というか他所にどかしておく)なら lib/rubygems.rb と lib/rubygems ディレクトリ、 あと /path/to/bin/gem …は平気か。
bin/gem も消しますた
レンタルサーバでバージョンが固定されてるんでもなければ1.8.7使っとけ
RubyでApacheのモジュールって作れないですよね?
造ろうと思えば造れる
まあ、作れない、でいいと思う Rubyで作るということそれそのものを目的にするのでない限り、他の手段をとったほうがいい
>>592 ほらほらそんなこというとまた出てくるよ
>>592 あれ、mod_rubyは使えないの?
使ったことはないけど、ドキュメントを読む限りではmod_perlと同じ様にできそうだったけど。
ずれてるけどあえて指摘しない
初心者スレなんだから優しく お・し・え・て・ょ
947 デフォルトの名無しさん [sage] 2011/07/01(金) 12:31:19.28 ID: Be: 勢いが1月で終ってるから誰も来ないでしょ きのこスレとか再利用すればいいよ 948 デフォルトの名無しさん [sage] 2011/07/01(金) 12:35:21.02 ID: Be: つ 【オフサイドルール】プログラミング言語文法総合スレ【ダングリングエルス】
日本発のオブジェクト指向言語Rubyでスクリプトかいてマ板とム板を荒らしたいんですけど やっぱりクッキー偽装しても書き込み秒数制限の壁に当たります IPの仕組み的に考えるとやっぱりこれは1PCで荒らすのは困難なことのでしょうか?
600 :
tensi :2011/07/01(金) 13:53:24.29
si
SketchUpって物凄くひさしぶりに聞いた まー、Google SketchUpを使ってる人でこれ使いたい人ってことでかなり限られるとは思う
>>598 ここまでかいたので、誰かマ板ム板の荒らしに役立ててください ぼくは忙しいのでもういかないといけません
どなたぼくの意思を受け継いでもらえると うれしいかぎりです ろくな技術的話題も展開せず2chにたむろしてるゴミグラマたちに 制裁を 制裁を 天は許しても俺は決してお前たちを許さない
require 'rubygems'
require 'mechanize'
require 'kconv'
require 'pp'
for i in 0...1
agent = Mechanize.new
uri = URI.parse("
http://hibari.2ch.net/test/read.cgi/tech/1307845568/l5 ")
uri2 = URI.parse("
http://hibari.2ch.net/ ")
agent.get(uri)
str = "PON=softbank127001001001.bbtec.net"
Mechanize::Cookie.parse(uri2, str){|c| agent.cookie_jar.add(uri, c)}
str = "HAP=FOXdayo53616c7465645f5fdefa1063f4b590c067e8f3fd221e3bc2e769268f80854ab4922fa1f60a6afddd2" +
"adcf2d018cec008177b9704cedd4d2572b79ae244c952b9d1db3a6ea323e1bb0676f649c68f67b6ced026e18acfcc"+
"608072782896e68c77a704b0850071f817b68e3b940576e00324e9a3a22b99243384adbec76fddd203b862612934cf"+
"bae4d7ebf686b3c84ffd7566ce20704469004110fe95ae782d0d"
Mechanize::Cookie.parse(uri2, str){|c| agent.cookie_jar.add(uri, c)}
agent.page.form_with(:name => nil) { |f|
f.field_with(:name => "FROM").value = "tensi"
f.field_with(:name => "MESSAGE").value = "si"
}.click_button
sleep 1
agent.page.form_with(:name => nil).click_button
end
>>602 リスクが怖いからって人にやらせようとすんなよヘタレ
これ実行したらどうなりますか?
>>604 APIなんだし、SketchUpを操作するんじゃね?
>>603 ハァ?
どんな方法であれ他人のPCでやらせるのはあたりめーだろ
お前まさか アレ をやる時も自分PCから直接アクセスしてんの?wwwwwwwwwwwwップwwwwwwwwwwwwwwww
このひとってうよってひととどういつじんぶつ?
Rake のバージョンを Rakefile 中から参照するにはどうしたらいいですか > rake/rdoctask is deprecated. Use rdoc/task instead という警告をなくしたいんだけど、よく考えたら rdoc/task があるかどうかはクライアントの Rake のバージョン依存なのよね
>>608 こ れ す ら
出来ないんだな・・・・・・
a = `gem list rake`
a =~ /rake\s(.*)/
p $1.split(/,/)
rdoc/task をまずは require してみて、ダメだったら(例外をrescueして) rake/rdoctask を require かなぁ?
天使=uy=Perl忍者
>>610 えー
まあ、今回はそれでもいいんですが、そうしようかなあ
バージョン依存で困ったら、またそのとき考えよう
あ、これ困ってたのよ >よく考えたら rdoc/task があるかどうかは RDoc gem がインストールされているかどうかだと思う だから、今回は require で rescue するのが正しい …のだが、改めて rake/rdoctask.rb を読むに、なんかとてもめんどくさいことになっている Rails 厨向けの rake のバージョンを 0.8.x に下げろという台無しアドバイスは今回に限ってはわりと妥当だw 依存関係に RDoc を指定してしまうのが一番かもしれない ユーザーにとっては迷惑だろうけど…
>>607 どちらにせよ基地外なので同じでも違ってもどうでもいい
社内用の小規模な Web アプリケーションを Ruby で開発しています。 rhtml や erb ファイルをステップ実行させながらデバッグできる 開発環境をご存じでしたら御教授下さい。 バックエンドの CGI に飛んでいる部分もありますが、 Rails は使用していません。 eclipse, NetBeans, Aptana Studio を試してみましたが、 うまく動かせませんでした。 (できればローカルの Apache Web Server 2.2 と連携させてデバッグ させたいのですが、難しければデバッグ用に別のサーバを使う方法でも 構いません。) よろしくお願いします。 m(_ _)m
小規模でしかもWeb向けならステップ実行なんてしなくてよくね?
なんかHTTP出力をこまめにflushする仕組みなかったっけ?
rubyで2秒ごとに自動で更新できるようにしたいのですがどうしたら良いでしょうか?
>>618 2秒ごとにスクリプトを呼ぶようにOSのスケジューラに登録する
間隔が2.05秒になったら家族が殺されるとかいうような場合はRubyスクリプトを終了させずにsleepさせておく
なんか前にも言った気がする
何のアプリなんだろう?
Eclipse/NetBeansのステップ実行で「駄目」ということはつまり、 ブラウザ上の出力を止めて、ブラウザ上での送信を止めたいのだと思う
623 :
615 :2011/07/03(日) 12:10:21.31
次善策ではありますが、 rhtml や erb ファイルの代わりとなるドライバ CGI ファイルを用意し、ARGV.replace(["val1=3&val2='hoge']) などとして引数を渡すことでステップ実行させることにしました。 ありがとうございました。
1.9.1 1.9.2 1.9.3 の違いが良くわからん。 これらはどういう関係なの?
テンプレ読め って書いてないのか 誰だ削ったの 1.9 系列は「記述に1.8との互換性がないと断言できそうな新しいRuby」だ 1.9.0 が不安定な永遠の開発版で、1.9.1 以降が安定板 数字が新しいほど新しく、現在は 1.9.2 が最新 1.9.3 は公開目指して調整中 1.8.x は旧系列で、1.8.6 が昔の安定板 これ以前のものは現在の不安定版に相当するので現在は使ってはいけないおい聞いてるかCentOS 1.9 のいくつかの便利で無難なメソッドを輸入した 1.8.7 が現在の 1.8 系列の最新版 完全初心者が 1.8.7 と 1.9.2 のどちらを最初に使うべきかというのは議論中だが(結論出る前に1.9が一般化してうやむやになる予定)、 とりあえず 1.8.7 ならあらゆるものがエラーなしに動くと思われる
>>625 1.9.1、1.9.2、1.9.3は新しいか古いかの違いだと読み取れるけど、
それじゃあ、1.9.1と1.9.2にそれぞれパッチを当ててリリースしてるのはどうして?
何か機能的に違いがあるってことじゃないの?
今、マルチバイトのディレクトリ内でサーバー起動して、 index.htmlは動いたけどindex.cgiは動かなかった しかもこれ、ディレクトリ名にマルチバイトがはいっていたら動かないのではなく トップディレクトリがマルチバイト文字だと動かないらしい 下にsabaとかフォルダ作ればその上にあるのがマルチバイト文字のフォルダでも動く Rubyってマルチバイト弱すぎだろ それに何かインストールさせたい時にもディレクトリにマルチバイト混ざっていると動かないしさ それってつまりFirefoxなんかの"デフォルト"のダウンロードしたファイルを保存する"ダウンロード"っていう名前のディレクトリに保存された Rubyのライブラリや、Ruby本体のインストーラーが、ダブルクリックでは動かないって事だぞ 処理系内部で自動識別はいつになったらやるようになるの?
自分でやれよゴミ天使
いろいろと勘違いが凄すぎて何も指摘できない
>>626 あるよ
1.9.0 というベースがあって、それが最初に固まったのが 1.9.1 で、1.9.2 が出た現在、これはバグフィックスだけが行なわれる
バージョンの後ろの p123 みたいな数字がパッチレベルで、これが大きいほど修正が施されてて新しくて安全
1.9.1 相当に細かい新機能というかあればよかった系の新メソッドをどさっと加えた状態で公開されたのが 1.9.2
1.9.3 は 1.9.2 相当に新機能足したものになる予定
だから「1.9.1 では動作したけど 1.9.2 では動作しない」というのは全くないというわけではない
…いや、はっきり言うと、1.9.2 はカレントディレクトリを LOAD_PATH に含まなくなったので非互換どころではなかったw
1.9.2 の動作のほうが「正しい」んだけど、こんな途中でするような手術ではないっていうか 1.9.1 でやっとけよみたいな
1.9.1 や 1.9.2 のバグ修正パッチサポートがいつまで続くのかは知らない
どっかに書いてあるとは思うんだけど…
元々の扱いは開発版だったしな 正式版扱いになったのっていつ頃だっけ、その頃1.8と1.9ってバージョンいくつだったんだろ?
1.9.1から正式に全て安定版ですが 1.8系列の安定板は1.8.6から
あれ、そうだったっけ んじゃあ真ん中の番号を偶数奇数で開発安定ってのをやめたのいつ頃だったっけ?
1.9.1 のとき 本当は 1.9.1 は 1.9 系列つまり開発版の第 1リリースになるはずだった でもそうすると 1.9 系列をもとにした安定版は 2.0 ということになってしまう Ruby 2.0 という名称をまだ使いたくなかったので、1.9.0 を永遠の開発版にしたわけ いきなりここでバージョン番号規則が捻じ曲がったから、当時はけっこう混乱した まあ、今みたいに普及してしまえばどうということもないのだけど 1.8.8 が出たら 1.9.0 と近くなりすぎてめんどくさいことになるかもしれない 1.9.0 はそのへんに落ちてないから、問題は起こらないとは思うけどさ
635 :
デフォルトの名無しさん :2011/07/03(日) 18:21:37.82
String.split()で¥(半角)で分割したいときってどう書けばよい?
マニュアル読め的な何かだが、split は引数に正規表現をとることができる なんか何故か世の中には頑なに文字列(しかも1文字)のサンプルが氾濫してるんだが ということで split(/\\/)
しまったこいつは ¥ だ! 俺が変換するからお前らは逃げろ! split('¥') が正解
¥の半角は¥である
うむ、間違いではないな
間違いではないのだが…
ふつーのバックスラッシュで分割したいなら
>>636 特定文字の円記号で分割したいなら
>>637
639 :
635 :2011/07/03(日) 18:53:58.40
本来バックスラッシュなんだけど、場合によっては円記号になる → U+005C REVERSE SOLIDUS 円記号 → U+00A5 YEN SIGN
>>628 はぁ?
これ す ら わからないときたか
>>629 他アプリの初期設定で動くようにしてない時点でゴミなわけだけど
しかもそれがマイナーブラウザならまだしもFirefox
天使さん戻っておいでよ
>>640 そういう話はしてない
¥の「半角」に相当するものがなにかという話だ
yen sign でよかろう
そして、たぶんそれは間違ってる
キーボード押した時にOSが何の画像を表示するかだろ 画像だよ結局、画像 splitが正規表現も使えるかどうかなんて、経験則 他のsubやgsub,scanも同じ事情なんだし、アホじゃなければそのうち気づくだろ 個人的には、それらの関数が//のかわりにStringでいいにもかかわらず "aaa" =~ "a" これが通らないのが変だとは思ってる
「もうちょっとだけ続くんじゃ」ってことはしばらくメンテするってことなんだろうけど、
実際のメンテナンスサイクル期間についての言及はなかったと思う
ゆぐいの記録するところによれば
ttp://yugui.jp/articles/801 > 2本のteenyブランチがメンテナンスされる。
> 今は1.8.6と1.8.7がメンテナンスされている。
> 1.8.5はもう放棄される予定だ。1.8.8が出たら、1.8.6はじきに放棄される。
ということなんだけど、1.8.6 はREEでしばらく継続サポートされるはず
めんどくさいことになってるな
>>647 その情報はかなり古い。MLを見ている感じだと、
☆1.8.6は事実上死んでいる
☆1.8.7は多分あと1年くらい
☆1.8.8はリソース不足で出せなそう
なので公式サポートはあと1年と見積もってる。
まあ正式発表はRubyKaigiで出ると思う。
ただし公式より頼りになるREEサポートはまだ続く。
1.8にしがみつきたい人はREE買えってことになると思う。
>>648 嫌いじゃ無い。
中二病くささがたまらんな。
質問です firefoxの2chの忍法帖クッキーは C:\Documents and Settings\uyuy\Application Data\Mozilla\Firefox\Profiles\i2ip2n78.defaultここで s = open("./cookies.sqlite" , "r").read p s.size n = s.index'FOXdayo' p n p "HAP=" + s[ n ... n+327] こうしたら取得できたんですけど、IEのクッキーが保存されていると思わしき C:\Documents and Settings\uyuy\Local Settings\Temporary Internet Files ここのフォルダのファイルはなにやら特殊な感じで検索しようにも上手くファイルオープンもコピーも出来ません IEのクッキーから2chの忍法帖のクッキーを取り出すにはどうしたらいいですか?
目でおって検索して見つけて自己解決して解決しました ありがとうございました
>>651 実際問題として、1.8.7をメンテナンスしていったほうがいいと思う
1.8.6と1.8.7の問題が1.8.6と1.8.7と1.8.8の問題に増えるだけで、誰も喜ばない
>>651 唯一興味を持っていた1.8.8メンテナの武者さんに時間の余裕がないという話なので。
資金のないOSSでは興味ある人がいないのとリソース不足はほぼ同義だよ。
処理系は1個だけのほうが良いに決まってる
>>654 1.8.8を作るメリットもないですしねえ
1.8の未来についてRubyKaigiで語られる可能性も(1日目のアナウンス枠で)あるみたいだしそこでいろいろ聞けるかもしれないですね
[ruby-dev:44027]
Ruby on Railsとrubyはどっちがおすすめでしょうか?
Ruby RoRは言語じゃなくて rubyインストール後に gem install rails とかやるとインストールできるRubyのとあるライブラリのいんでっくす
英数字の全角と半角の混ざった文章。 誰かが何処かで書いてたな...
>>659 ライブラリのインデックスじゃなくてWebアプリケーションフレームワークだろ
複数インストールされるのはただ部品を分けてるだけ
>>661 枕詞みたいなものなんだろう
とある→インデックス(とある魔術のインデックスってアニメがある)
知らない人は混乱しても仕方ないね
禁書目録ね この回答を書きたいがための質問のようにも見えちゃうね
このコテハン「大天使 ◆uL5esZLBSE」は天才チンパンジー「アイちゃん」が 言語訓練のために使用しているハンドルです。 アイと研究員とのやり取りに利用する書き込みなので、 関係者以外はレスしないで下さい。 京都大学霊長類研究所
どっちかっつーと精神医学研究所とかのがしっくりくる
オブジェクト指向がしっくりこないんです…
[1,2,3]と[1,4,9]のそれぞれの要素を掛け算した配列を作りたい時に [1,2,3].zip([1,4,9]).map{|a,b| a*b} と書く以外に何かスマートな方法はあるでしょうか。 [1,2,3]と[1,4,9]が意味的に対等だったりするとなんとなくしっくりこないんです… map((lambda x, y: x*y), (1,2,3), (1,4,9)) というふうに並べて書けたりはしないでしょうか。
ん irb> require 'rubygems'; require 'narray' irb> p (NArray[1,2,3] * NArray[1,4,9]).to_a [1, 8, 27] こうでいっすか
[[1,2,3], [1,4,9]].transpose.map{|a,b| a*b} transpose 長いな、転置。
どうしてもオブジェクトとメソッドの引数って関係になりがちだからなあ
2つの配列は固定なんだし先に計算しといて結果を埋め込めば良い
eval %x{ python2 -c "print map(lambda x,y: x*y, (1,2,3), (4,5,6))" }
配列の数が増えたり配列の長さが増えたり要素の値が変わったりはしないのかな
一発で書けないと見せかけつつ実は書けそうと見せかけてやっぱり書けないという筆頭の処理なんだよねこれ まあzipで中間配列作るのでいいやとか思ってる
irb>(NArray['a', 'b', 'c'] + NArray['1', '2', '3']).to_a ["a1", "b2", "c3"] ぬう…
>>659 >>661 ありがとうございます。基礎RubyonRailsという本を買いデータベースと接続の仕方などを
勉強しようとしましたが、webアプリケーション作りの本で何か自分の作りたいものと違うきがしたので
RonRはいったん中断しました。
Rubyで下記のようなwebからスクレイピングした、数字などの羅列データを
dbiを使ってMYSQLに記録してくプログラムを作りたいと考えています。
現状で自分にできることはwebからのスクレイピングと
rubyでDB(MYSQL)に接続して、外部ファイルからのデータの記録ですが
スクレイピングした数字や文字をどうやって、MYSQLに落とし込むかで
行き詰っています。先に進むためのヒントや解決策などはありませんでしょうか?
よろしくお願いします。
2011年07月04日
137
135
137
135
114,958,200
137
2011年07月01日
133
133
134
132
107,426,900
133
最近スクレイピングネタが多いな
正規表現の\Zと$の違いがよくわかりません。
スクレイピングもできててDBへの記録もできるとなると何ができないのかよく分からんが スクレイピングしたネタを一旦外部ファイルに書き込んでみれば?
irb(main):001:0> a = "abc\ndef" => "abc\ndef" irb(main):002:0> a =~ /c\Z/ => nil irb(main):003:0> a =~ /c$/ => 2 irb(main):004:0> a =~ /f\Z/ => 6 irb(main):005:0> a =~ /f$/ => 6
>>680 ありがとうございます。なんとなくやり方がわかったきがしました。
・スクレイピングして取得したものを一度テキストファイルに出力
・そのテキストファイルを、rubyでSQLのINSERT文に加工
・その後、rubyで加工したファイルをMYSQLに記録
全部を一回のプログラミングでやろうと考えていて、取得した文字や数字を
どうSQL文の形に変換すればよいのかわからず行き詰っていました。
まだ当分かかりそうですが、段階にわけてMYSQLニ落とし込んでみます。
テキストファイルから取得したデータをどうやってSQL文にしたんだよw
>>683 まだ、スクレイピングで取得したものを外部ファイルにする方法がわからず
たのしいRuby片手に悪戦苦闘しています。そういえばMYSQLは.sqlファイル
でした、全然わからないことが多すぎて質問もとかもトンチンカンで申し訳ないです。
>>648 izanami
izanaki
susano
yukuyomi
amateras
いけるな
なんでテキストファイルに一度出力するの? RubyでスクレイピングしてるならそれをそのままSQLにすればよくない?
それができるほど習熟してないからだろ
>>687 たのしいルビーでテキストファイルなどを読み込んだりしていたので、
テキストファイルなら簡単にできそうなきがしたもので書いてしまいましたが
SQLファイルで出したほうがよさそうですね。ありがとうございます。
つかSQLファイルになんかせんで直接入れればいいんじゃないか?
どうしてもDB/SQLの勉強したいっていうんじゃなければ PStoreやYAMLで間に合わないか検討してからのほうがいいと思うよ
PStoreオススメ
便乗なんだけどスクレイプ元のデータが適当なんで(全角半角とか。一応処理してるけど) 一度人間の目を通してから保存したいときに使える形式ない?
なんか、なんていうか、俺が知らないだけで、世の中にはバイナリ限定な形式がものすごく溢れてるのか? テキストで処理したならそのまんまテキストでいいだろと思うのだが
YAML, もしくは普通の表になってるならCSVかな YAMLは標準ライブラリyamlをrequireしてHash#to_yamlでYAML化された文字列がとれる
> yaml irb> p YAML.load(YAML.dump("1\n \n2")) "1\n\n2" プッ ちなみに Ruby 1.9.2 の psych では直ってる(というか、挙動が変更されてる)が Ruby 1.9.2 自体の再コンパイルが必要
超一般論としてコンソール上で目視確認するのは辛い テキストファイルに書き出してエディタとかで読んだほうがたぶんマシ データ取得&整頓&書き出しのフェイズと目視確認後のファイル読み込み&データ適用のフェイズを分けておけばいい 変更点が多くて目視だとウォーリーを探せない状態なら整頓前後で外部 diff でもかけと毛
配列とかにしちゃったデータを
配列を保ったまま
人間が読めるテキストのようなものにしてあとで復元するのは意外とめんどくさい
Hash だとかなりめんどくさい
YAML が候補ではあるが、
>>697 のように改行とか微妙だし、
irb1.8> puts YAML.dump(["YAML", "まじ", "うんこ"])
---
- YAML
- !binary |
44G+44GY
- !binary |
44GG44KT44GT
という感じで dump した日本語が人間には読めない(バイナリ扱いなだけで、load で読むことはできる)
yaml ではなく ya2yaml を使うと日本語にはなるけど、あれってネストとかできたっけ
最新1.9.3の開発版を使っているが それだとちゃんと --- - YAML - まじ - うんこ になる 1.9.2の段階だと --- - YAML - "\xE3\x81\xBE\xE3\x81\x98" - "\xE3\x81\x86\xE3\x82\x93\xE3\x81\x93" になる
>>700 に追記だがlibyamlがありpsychがインストールされていないとダメかもしれん
702 :
デフォルトの名無しさん :2011/07/06(水) 15:58:56.99
そんな難しくないだろ
>>700 ああ、それ psych の機能
$ ruby -ryaml -e "puts YAML.dump(['日本語'])"
---
- "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E"
$ ruby -rpsych -ryaml -e "puts YAML.dump(['日本語'])"
---
- 日本語
class Test @@s = "Hello" def self.method1 @@s end end この@@ってなんですか?
>>704 クラス変数
今はもうあんまり新規では使用されないので、忘れちゃってもいいぞ
>>705 クラス変数はなぜ今は使用されないのですか?
代わりとなる機能があるからですか?
>>703 後からpsychがデフォルトになってlibyamlが無いとダメだという事に気づいた
1.9.3 は確かpsychがデフォルト
なぜ今は、というか、元々は存在しなかった。 確か安定版では 1.4 か 1.6 だったかで入った新機能。 クラスをシングルトン的に使う時に使う(Javaのクラス変数とかみたいに)ものだけど、 Rubyのクラス変数は継承しているクラス全部からいじれるとか癖のある副作用が 大きいので、そういう設計はしないのが普通ということになっている。
>>705 ありがとうございます
とりあえず気にしないでおこうと思います
protectedの使いどころが分かりません。 典型的な使いどころはあるのでしょうか? privateはそのクラス内でのみ使う時に何となく利用してますが サブクラスに継承されてしまうので、こちらもちゃんと使えているのか不安です。 rubyのアクセス修飾子は少しクセがあるように思うのですが私の思い違いですかね?
protected は「私はRubyを理解していません!Java最高!!」というアピールをしたいときに使う
>>711 でFA
private はレシーバつきで呼ばれたときにエラーを返すようにする効果をもつ
アクセス制御でも可視性の設定でもない
「あいやーこのメソッドはレシーバつきで書いちゃダメなのね」
とユーザーに実感させる御利益しかない
ぶっちゃけ全部 public でも構わないぞ
「このメソッドは内部用だから外から使って欲しくないなあ」という場合はメソッドの def の行に :nodoc: って書いとけ
>>706 俗に「クラスインスタンス変数」と呼ばれる概念がある
他の言語にはオフィシャルであったはずなんだけど、Ruby の公式には存在しない
class C
@var = 1
class << self
attr_accessor :var
end
def disp
self.class.var
end
end
p C.var #=> 1
p C.new.disp #=> 1
C.var = 2
p C.var #=> 2
これは「くらすたんいのへんすう」を提供できてなおかつ継承で流用されないというメリットがあるんだが、継承で初期値がセットされないという欠点もある
class D < C
end
C.var = 2
p D.var #=> nil
まとめるとRubyではどう書くんですか? PHPだと class Abc { public $str; public $num = 1234; public function a(){echo 1;} private function b(){return 1000000;} protected function c(){echo 3;} public static function d(){echo 11111111111;} public function e(){echo $this->b();} }
>>713 継承でなんとかしてもらう方法
C.inherited は C が継承されたときに呼ばれることになっているこっそりメソッド
class C
@var = 1
class << self
attr_accessor :var
def inherited(klass)
klass.var ||= var
super
end
end
def disp
self.class.var
end
end
class E < C
end
p E.var #=> 1
>>714 private と protected はそもそも再現不可能
public も動作違うんじゃないかな
class Abc attr_accessor :str attr_accessor :num def initialize @num = 1234 end def a ; p 1 end private def b ; 1000000 end protected def self.c ; p 3 end public def d ; p 11111111111 end def e ; p self.b end end
protectedをデスってる人はrailsのソース読んだことないの?
>>718 本当に読んだなら、この文脈でそんなことは言えないと思うの
rails読んだことないや だって、ソースコードのメタ出力でしょあれ どこに読む価値があるのか、ファイル名で教えて欲しい
今書いてるコードを一行ずつ動かしたりしてどんな動作してるのか調べたいので デバッグについて調べようと思ったんですが本屋でいくらか手に取ってみても 書いてある本がありません おすすめの本とかサイトとかあれば教えてください
>>719 の指摘が真っ当
protectedという文字が書かれているのは確かにたくさん見たが、
それが妥当なprotectedだったという例はあまり見たことがない
別にこれprivateでもいいだろ、というものばかり
というか、ぶっちゃけ、Rails書いた人はC++あたりの知識で勘違いしたまま書いてたんじゃないかと思う
怖くて変更できないし動いてるからそのまんまになってるだけだと思うなあ
>>721 Rubyはあんまりデバッガデバッガした環境が揃ってないんだよね
privateメソッドだけどサブクラスから使うことを想定してますよ、 って意味を込めてprotectedにするのは駄目なのか?
>>723 入門者がGUIでステップ実行、となればeclipseとかNetBeans使うしかない気がする
つうかprotectedって概念が失敗
人はon(public)かoff(private)しか覚えられない
>>722 の一番したのやつも、無理やり使用例作ってるけど
どうせ別の方法なんていくらでもあるんだろ
rubyのprivateの実装が間違ってるから、privateを使うほうがおかしいという意味でprotectedを使ってるのに 722みたいに、Ruby界隈にはアホが多い
>>728 名前はこの際二の次
protectedの動作が必要かというと、別に必要ではない
privateの意味で使ってないからprotectedで正しいんだよ
matzが2.0に大きな変化を入れようとしてた頃は、もう少しまともにしようと考えてたから、 あのまま大きな変更されてたら、private推進派は困ったろうな。 privateの動作じゃないところもprivateにしてるから
意味なんてどうでもいい 実際の動作とは違う意味を持たせたいならそのようにコメントに書いとけ protected と書かれた場合、それは protected としてのみ動作する あたりまえ
railsデスってる奴は馬鹿だね〜 ちゃんと意味を考えてprivateとprotected使い分けてるよ。 active_record/base.rb辺りのソース読めば分かるんじゃないかな。
勘違いに基づいた使い分けをしているという話よ。
日本人の中心的なRubyistたちは継承使うなとか言ってる馬鹿ばっかりなんだから真に受けたらだめよ
>>735 継承はほとんどの場合必要ないよ
Mixinがあるもの
Mixinがないような言語での話はしてない
他の言語ではクラスを継承するしかないような場面でも include するだけで終わったりするからな 他の言語では継承していたからといって、Ruby でも継承しなければならないということにはならない その程度
>>723 そうですか
他の言語も視野に入れてもう少し検討してみます
クラス変数すらモジュールで定義できちゃうし、クラスじゃないと絶対駄目ってケースは無いな。
active_record/base.rbよんできたけど、サッパリだった 寝る
あれ。これは動作どうなってるの? Nilclassになった module A class << self < Hash p self def a p 4 end end end nil.a # => 4 wwwwwwwww
継承の実質的なメリットは大きく分けて二つ ・型を揃えることでポリモーフィズムを実現する ・実装を共有する 前者はRubyでは必要ない 後者はmixinでもできるというだけであって、継承を使わない理由にはならない もちろんOOPにおける継承は、最も強力で使いづらい機構とされているから 委譲が使えないか考える、といった一般的な指針は 考慮したほうがいいのだろう
module至上主義の連中はRuby使ってない奴らなので実害はない あいつらの理想に通りにライブラリ作っても、使いづらくて普及しないし
継承って要は委譲のシンタックスシュガーみたいなもんだろ。 わざわざ言語に組み込むような機能じゃないわ。
>>744 継承使うべきケースを一つでも提案してくれよマジで
Rubyの中でも当たり前に継承使われてるのに、746みたいなこと言うんだもんな
Rubyを宣伝する上でMix-inの存在が謳われた時期があって、その流れでmodule至上主義が台頭してきたわけだが、 奴らはMix-inでも出来るというどうでもいい理由で継承使わないだけだから無視してかまわない
継承するってことは親クラスの仕様を全て理解して責任をとるってことだからな。 普通に考えて超〜めんどくさくね?
じゃあBasicObject使いまくりなんだろうな
多重継承を、単一継承とmixinの2ラインに「分けた」ところが ポイントなのであって、mixinしか使わないのであれば C++/Eiffelに逆戻りしてしまうだろう
ある集まりで、クラスで書いたライブラリをmoduleにしろとダメ出しされて、 しょうもない実装にされたのを目撃したことがあります
クラスで書くかモジュールで書くかの判断基準はどこに
a "aaa\n" "bbb\n" "ccc\n" このようなaというファイルを下記のような配列に変換したいのですが a.split("\n")とやってもうまくいきません。 ["aaa","bbb","ccc" ] このような配列にするにはどのようにしたらよいでしょうか?
755 :
デフォルトの名無しさん :2011/07/08(金) 02:23:34.47
結局、protectedの使いどころはどこなんだ?
派生クラス扱えるんだから全部protectedでいいんだよ
プライベート→むしろなんかエロい プロテクテッド→ガードが固いイメージ パブリック→スポーツ感覚でパコパコしてそう
こうして見てると、Rubyの実装っていかに糞で洗練されていないかってのがよく分かるな。 Rubyコミッタの質の低さは有名だが、それ以前の問題だなこりゃ。 日本発だのとチンケな意地を張ってないでRailsチームにRubyの開発も丸投げすりゃいいんだよ。
privateの機能がないのにprivate使うのはどうかしてるぜ
>>755 >>711 そもそも彼らは Java や C++ 「でそうであるから Ruby でも盲目で使っている」に過ぎない
Ruby での動作をきちんと吟味しているとは到底思えない、吟味してたらあんな変なもの絶対使わんw
…まあ、あの、あれだ、クラスメソッドを Hoge::mes と書ける、みたいに
既存の言語の真似をしてお客を呼ぼうということをしてた時期があって、
この private と protected はその太古の名残の遺跡のようなもんなのだ
Ruby 1.9 で消えるか「きちんと」実装されるかしてもよかったとは思ってはいる
なんか勘違いしてる人がいるんだが、使うなと言っている人はいわゆる「実装が糞」だから使うなと言ってるんだぞ
他所の言語のユーザ増やしたくて媚びてる実装が嫌だな。 べ、別にあんたなんかの為に作ったんじゃないからねっ!
>>754 いちばん簡単なのは、ファイル内容すべてを文字列として読み込んでしまってから文字列操作すること
str = File.open('a.txt', 'rb'){|f| f.read}
arr = str.split
p arr # => ["aaa", "bbb", "ccc"]
簡単で単純、問題は a.txt がべらぼうに大きかった場合はメモリを一瞬占有しまくること
File.foreach や File#each_line を使うこともできる
arr = []
File.foreach('a.txt'){|line| arr << line.chomp}
p arr
か
arr = []
File.open('a.txt', 'rb'){|f|
f.each_line{|line| arr << line.chomp}
}
p arr
1行ずつ読んでいちいち捨ててるのでメモリの増大はそうそう起きないが(GCのタイミング依存なので保証はできない)、
微妙に記述が多く、IO の性格上どうしても改行ごと持ってくるので String#chomp がどうしても必要
似たような見かけの readlines は全部読んでから配列に split してるだけなので御利益がなにもない
括弧が無いのは好きじゃない
>>754 >>762 File.read("a.text").split(/\r?\n/) でおk
File.readはファイルの中身を全部読み込んでクローズした後ファイルの中身の文字列を返す.
String#splitで文字を正規表現もしくは文字列で配列に分割
>>764 File.read は初心者スレでは使ったら駄目
splitの引数は/expr/使うんだ!
こんな感じの処理で require 'rss' (略) rss = RSS::Parser.parse(source, true) rss.channel.items.each { |item| puts "#{item.title}" } RSSが <channel> <title>タイトル</title> ←(1) <foo:bar>hoge</foo:bar> ←(2) </channel> (1)は上記の処理で出来るんですけど (2)ように名前空間がついたものを参照する場合はどのようにすれば良いでしょうか?
768 :
てんし :2011/07/08(金) 11:31:58.55
実装つうか、その概念の考え方の否定してRuby独自のパーソナルリアリティを作り出してんでしょ? 俺はC++やってた頃から継承使うなって言ってたはず、初期段階から中途半端な感じがしてた 継承とMix-inでは継承のほうが比較的「大きな道具」で、小さいほうの道具であるMix-inで済む場合は、そっち使うのが当たり前というか しかもinclude,extendって2種類の方法用意されててしかもincluded,extendedまであっていたせりつくせりじゃん 継承の考え方って本来は、古いソースコードを、何も考えずに「機能を継承して」そこに機能追加したいとき使うものだと思う バージョン管理をソース内でやっているようなもん だから実際に今新規で作ってるときに継承使うっていうのは、用途がおかしいと思ってる
LLバトロワスレの次スレ立ってるからそっちでやれ
>>765 >File.read は初心者スレでは使ったら駄目
なんで?
fileの中身が2GBとかだったらどうすんの
1.8系だとバイナリモードを指定できないからとかいう話じゃないか
>>764 でダメってのも脊髄反射な気もするが
というか
>>754 の仕様だと全て配列にするのだから、結局オンメモリになるわけで
1行づつ読んだところで、ファイルがでかきゃ死ぬ。
多分、十分にファイルが小さいことが分かってるのだろうから、
>>764 でいいだろう。
エスケープ表現(?)な文字列をエスケープされた文字列に変換したいのですが、 eval以外のやりかたってありますか? いまは foo='a\nb' bar=eval('"'+foo+'"') print foo print bar とやってるのですが、fooにスクリプトを入れられるのが怖くて
>>767 はがっかりしてるかもしれないが、標準の RSS ライブラリを使ってる人はあまりいない
わざわざ調べないといけないのでレスがないのだろう
んで File.read に関しては
>>772 が正しい
Ruby 1.8.x ではバイナリモードにできないので、File.read は 1.8.x が消えるまでしばらくの間なかったことにするべき
標準ライブラリの実装は慎重にしましょうというありがたいお話
あと、1GBのテキストはメモリ上に保持できても1GBのテキストとそれを分割した配列(しめて2GB以上)を保持できるとは限らないので
即捨ての入力が即捨てできるようなら意識的にそうしておくべきだと思われる
初心者スレなら特に
>>774 言葉の表現とやりたいことが矛盾してないか
>>774 標準には無い
「バックスラッシュなんとか」を正規表現でgsubして\nなら"\n"にして\hexhexならpackしてという手作業が
なんか誰か作ってそうだけど
>>767 仮にfoo:barがdc:creatorであればrss.channel.dc_creatorでアクセスできる
都合が悪くなければRSSのURL晒すとレスがつきやすいと思うよ
779 :
774 :2011/07/08(金) 15:51:46.75
>>776 string.dumpの逆がやりたいんですが、なんて表現したらよかったんですかね
>>777 やっぱりないんですか
用途的には需要ありそうですが。。。
ちょっと考えます
立て続けに質問すいません。
>>754 の改行\nの記号を消して配列に収めたいのですが
どうすればよいでしょうか?
str = File.open('a.txt', 'rb'){|f| f.read}
str.delete("\n")
arr = str.split
p arr
や
str =File.read("a.txt").split(/\r?\n/)
str.delete("\n")
p str
などやってみましたが
["\"aaa\\n\"", "\"bbb\\n\"", "\"ccc\\n\""]
となります。
["aaa","bbb","ccc" ]こんな感じにしたいです。
うむ、ほぼ全員がファイル内容を勘違いしてるな すべての行がダブルクォートで囲まれて、改行などがバックスラッシュ記法されてるという変なファイルだ ということで、 str = File.open('a.txt', 'rb'){|f| f.read} arr = str.scan(/^"(.+?)\\n"$/).flatten p arr でどっすか
直列化するときにファイルにpで出力してるってことか
>>781 ファイルに保存するときに
printやputsで吐くようにしたら楽になれるかも
>>783 改行の復元で泣きそうだが…
改行文字を「絶対含まれない文字列」に置き換えればいいんだけど、それができるならここで悩まないと思う
>>782 ありがとうございます。
出力結果は[ ]になりダメでしたが、scanで、\n以外を配列にしてflattenで
配列を平滑化するというやり方勉強になリました。
>>783 >>784 ファイルに吐き出す段階も見直してみます。ありがとうございます。
そりゃただの正規表現のマッチングだからな 実際の文字列がどうなってるかなんてわからんのだし、自力で正規表現書くしかない
f.readってオンメモリなのか。2gb超のファイル読ませたらosごと堕ちたからなんだこれ?と思ってたw
ヒアドキュメントで末尾に改行が付くのを回避するには、 <<HEREDOC.chomp Hello, World. HEREDOC と書くしかないのでしょうか。
特異メソッドの一覧を取得するメソッドはありますか? class << obj instance_methods end このように特異クラスをオープンすれば可能なのですが、 objに対して直接メッセージを送って取得したいのです。
>>788 はい
まあヒアドキュメントってそんなもんだと思うので仕方ないかと
テスト書くときにめんどいっすな
>>789 特異クラスという言葉は使わないほうが紛らわしくなくていいと思う
Ruby 内部ではぜんぜん特別扱いされてないし
というわけで特別扱いされてるシングルトンメソッド一覧を singleton_methods ではりきってどうぞ
>>789 意図的な曲解はディベートの正当なテクニックだぞ
曲げて取られるのはお前に隙があるから
お前が消えろゴミ
>>791 という罵倒は正当だな
794 :
天使 :2011/07/09(土) 18:04:18.24
勝手に「ゴミ」って単語使わないでください 数段上の立場にいる奴が下層の者を指すときに汚いものを見るような目で(実際に汚い)見下しながら吐く言葉であって 同レベルの「人間」同士でゴミゴミ言ってゴミゴミしていても所詮どちらもゴミゴミ にしかみえない
名字が五味の俺はどうすれば・・・
>>793 まあ基本スレ違いだ
傾向が固まるまでは本スレとかでやってくれ
あと、そこに書いてある Windows 版の 1.9.1 と 1.9.2 が妙に遅いというのは観測的事実だ
あらゆるスクリプトを 0.2 秒で実行できるような環境だと気付けないんだけども
rubyでファイルをひらくときに File,open(ファイル)か、open(ファイル) の違いがわからないのですが どっちでも同じことなのでしょうか?
rubyは、いろんなものが同じに見えて実は内部でちょっとずつ動作違うメソッドが大量にあるけど File.openとopenは多分同じ 基本的に短いほうでいいとおもうよ
多分って、おまえマニュアル全部暗記したんだろ?
>>798 同じではない
File.open は引数をファイルパスとみなしていきなり File オブジェクトを生成しようとするが、
関数的メソッド open は引数がパイプ記法であるかどうかをチェックしてから File.open を呼ぶ
irb> p open('|ruby -v'){|f| f.read}
"ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-linux]\n"
Ruby 1.9 では to_open メソッドが動作するならその戻り値の IO オブジェクトが利用される
irb1.9> class C; def to_open; open('|ruby -v'); end; end
irb1.9> p open(C.new){|f| f.read}
"ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]\n"
ああ、1.8.7 のバージョン古いなあ
もちろん open-uri ライブラリで動作が上書きされるのも関数的メソッド open のほう
ファイルを開きたいだけなのなら、File.open を使用する癖をつけたほうが本当は好ましいんだが、若干書くのめんどい
上のほうでクラス変数あんま必要ないとかあったけど シングルトンの時とか使わんの?
804 :
大天使 ◆uL5esZLBSE :2011/07/10(日) 17:17:23.66
>>800 暗記でいいよ、少なくとも「読んだ」って言うとお前たちゴミはすぐ勘違いするから
>>803 クラス変数? 使うにきまってんだろ
ここ学校じゃなくて所詮2ちゃんねる
ネット上の無責任なリソースの中で役立つのはソースコードのみで
そいつ自身の考え方なんて、95割ゴミ 聞く価値はない
たとえ言語開発者が使うなといっていても、言語開発者がプログラミング設計の全てを知ってるわけじゃないので
使える道具は多いほうが良いのは当たり前、ただ将来的に長く使って行くソースコードだったら
Rubyの仕様変更の被害にあいそうな可能性をもつ記述は避ける
>>803 特異メソッドや特異クラスなら同様のインスタンスは生成できないから
RubyであまりSingletonを使う必要がないのよ
rubyでsingletonって使ったことないな。 Java出身者が使ってるだけじゃねーの
すっごく慎重に設計しないといけないので人気はない
標準ライブラリに入ってるあたり、 昔はそれなりに使われてたんでは。
何か慎重にならないといけないようなことあったっけ? たまに使ってるけど、特に意識してることないなぁ
Net::HTTPがSingleton使ってたはずだが(今でも使ってる?)、 なんかSingleton使わないほうが素直な構成になるんじゃないかみたいな奇妙な違和感が…
よくある例だとロガーとかDBセッション関係とかかね でもそのへんて既存のもの使っちゃうから意識して書くことは少ないか
812 :
デフォルトの名無しさん :2011/07/11(月) 04:47:52.56
オブジェクト.each {|変数|
オブジェクト.each do |変数| 繰り返したい処理 end オブジェクト.each {|変数| 繰り返したい処理 } rubyには、上のようにブロックを使う書き方と使わない書き方がありますが、 普段みなさんはどちらを主に使っていますでしょうか? file.closeなどしなくていい分、ブロックを使うやり方の方が便利なのかなと思っていましたが ここのみんさんはブロックを使わないやり方で書いてる方が多いようなきがしたので、局面で それぞれ違うと思いますが、どういった使い分けか知りたくなりました。 よろしくお願いします。
>>813 結合度の違いはあるけど、両方ともブロックを使っているように見えます
>>813 >ここのみんさんはブロックを使わないやり方で書いてる方が多いようなきがしたので
いや、全員がブロック使ってるはず
ブロック使わないような書き方してる人は質問側の初心者の人だけだ
内部で改行すると見かけのネストが深くなってしまうという見栄えの問題以外で、ブロックのデメリットはない
…いや、まあ、見えていないコードが見えない場所で実行されることについての指摘はある
ブロックつきメソッドの作成者が ensure を設定していれば 「}」 の部分で大量のコードが自動実行されるわけだからね
でもメソッド作成者が角度とかきちんと考えて設定したものなので、乗っかってしまうほうが通常は安楽
do ... end と { ... } は
・ 1行でおさまるなら { ... }
・ 直後にメソッドチェーンが続くなら { ... }
という使われ方の傾向がある
これ以外は好みだったり気分だったり、そのメソッドのマニュアルでどっち使ってたかだったり
結合度というものがあって「ブロックの外」と関係するときの動作が厳密には違うんだけど、
>>815 の言うようにこれの違いを利用してはいけないし発動させてもいけない
Perl忍者=TreeBoa=天使=Uy=ロ板を荒らしてたキチガイ...etc
818 :
813 :2011/07/11(月) 22:10:40.08
>>814 >>815 >>816 両方ともブロックなんですね。大変勉強になりました。
{.... } こっちの方が魅力的に感じてきました。
ありがとうございます。
質問用にコテつけることにしました
Ruby信者とモルモンは良く似ている ・他人の家にズカズカやってきて、求めてもないのに宣伝しまくる ・帰れと言ってもしつこく居座る ・やっと帰ったと思っても、次々違うヤツがやってくる ・自説は絶対であり、自説に同調しない者は、憐れなヤツだと思ってる ・自分が信じるのは結構だが、周りの人にも強制する etc. etc... 神の王国なんかに入れてくれなくて結構なので、放っておいてくれ
includeやらrequireでファイルを参照するのってカレントディレクトリのみでしょうか? 他にも「Cドライブのこのフォルダは参照の対象になる」とかってあるんでしょうか。 あるいは、それも自分で設定できるものなのでしょうか。 mygameというライブラリでゲームを製作してたんですが rhodesという、アンドロイドソフト開発用のソフト?のインストールやら rails環境を整えていたりしたらいつのまにかmygameをうまく読み込まなくなりました。 ./sdl.dll: 127: -init_sdl(LoadError) というエラーを吐くので、SDLを読み込めてないだけだと思うのですが ちゃんとSDL.dllは C:\bin の中に入っています。 SDL.dllはどこに置くべきなのでしょうか。 環境は OS : win7 64bit HomePremium Ruby : 1.8.5 です。
自分のおこないがそのままだとなぜ気づかない ↑Ruby初心者スレにズカズカやってきて、求めてもないのにdisりまくる ↑やっといなくなったと思っても、次々違うヤツがやってくる ↑自説は絶対であり、自説に同調しない者は、憐れなヤツだと思ってる ↑自分が信じるのは結構だが、周りの人にも強制する 自分がそういう奴だから、他人がそういう風に思えるんだろうな
>>821 Ruby のバージョンがあまりにも古すぎる
動作しないスクリプトのほうが多いぞそれ
せめて 1.8.6、Rails があっても 1.8.7 が欲しい
>>823 1.8.7のActiveRubyで再インストールしなおして直りました。
ありがとうございます。
こんな簡単なことに気づかないで申し訳ないです。
まる二日を環境変数いじったり、再インストールを何度もしたり
あきらめてサブPCに初めてlinuxをいれて結局そっちもあきらめたりして泣きそうでした。
825 :
デフォルトの名無しさん :2011/07/13(水) 17:37:39.68
ruby初心者です(>_<) csv形式のログファイルを取り込んで、適した形式に整形してgnuplotで出力したいってのが最終目的です。 そこで今は『,』をタブに変換して、いちおgnuplotの形式には出来ました(^O^) ただ今の問題は,ログファイルの中身に月日時分秒のデータがあるんですが、一番最初のログをとった時間を0秒にしてデータを書き換えたいと思ってます(>_<) 現在csvファイルからのデータ入力をreadlineで読み込んで、配列に格納してるんですが、時間の整形をどうやれば良いか全く解りません。 ちなみに自分は元々C++をしてました。 説明下手ですいませんが、宜しくお願いします。
>>825 DateTime.strptime
DateTime#strftime
class String def set_default_value # self = "hello, world" したい end end class Array def set_default_value # self = ["hello", "world"] したい end end class Integer def set_default_value # self = 3 したい end end こういうのってどう実装すればいいんですか できればインスタンス自体はそのままで値だけを変えたいんですが統一的な書き方ってあるんですか
>>827 何がしたいのかいまいちつかめないが
「オブジェクトのメソッドを使って、オブジェクト自身の値を変更したい」ということなら
replaceというそのものズバリなメソッドがある
ただしIntegerにはreplaceはない
>>827 単に入れもののクラスを作ればいい
たとえば URI は path の部分をあとからメソッドで変更することができる
Ruby に最初から備え付けられているクラスを再オープンしてメソッドを追加するのはあまりおすすめしない
というか、クラス作るのめんどくさいので {:key => 値} のHash で持ち歩くことが多いかと思う
>>828 ,829
replaceでいけそうです。
Integerの例は思いつきで書き足しちゃったんですが
実装考えたら無理な話ですね。
ありがとうございました。
下記の3つ目の出力はどうしてNameErrorが起こるのでしょうか? class C @foo = "foo" @HOGE = "hoge" class << self attr_reader :foo attr_reader :HOGE end def self.hoge @HOGE end end p C::foo # => "foo" p C::hoge # => "hoge" p C::HOGE #=> uninitialized constant C::HOGE (NameError) クラスに固有の定数をクラス外から利用したい場合は、どう記述するのが正解なのでしょうか?
@@HOGEじゃないのかい?
定数なら@なんて付けずに、単に class C HOGE = "hoge" end とすればC::HOGEでアクセスできるよ
定数はpublicなのかー
C::HOGE = 'huga' 警告でるけど書き換えれちゃうのね
まあ、Ruby は定数の使いどころ難しいしな 他のクラスから参照できたりメソッド再定義で利用できたりすると便利な気がする、そのクラス特有の固定データ、みたいな感じ そのクラス専用に定数を作ることはあんまりないんじゃないかな
>>834 1.9.3 でprivate_constantが導入されるみたいだよ
そんなにプライベートクラス欲しいか? …うん、あれば便利ではあるな
>>838 private_class = Class.new{|klass| ... }
があるじゃないか、一応
クラスは単なる定数だからprivate_constantがあればOKなんじゃ
>>840 これ、プライベートクラス作成用に導入されるのよ
いわゆるフツーの定数の可視性をどうにかしようと思ってのことじゃない
>>831 クラス名::ほげほげ
は大文字で始まって括弧が付いてないと定数と見なされるのでエラーになってる
C::HOGE()
とか
C.HOGE
だと大丈夫
::演算子はそもそも定数用でメソッドが呼べるのはおまけ機能
メソッドは.で呼ぶようにしたほうがいい
でも、そもそもふつうに定数を使えばいいような気がする
大文字メソッドはちょっと不思議 def AAA() :A end AAA() #これならメソッドして呼べるけど AAA #だとそんな定数はないよといわれる メソッドとローカル変数でも def hoge() :method end p hoge # => :method hoge = :var p hoge # => :var p hoge() # => :method なんだけど
下記のmixってどういう意味なんでしょうか? p Regexp.union(/a/, /b/, /c/) #=> /(?-mix:a)|(?-mix:b)|(?-mix:c)/
オプションのmとiとx
846 :
844 :2011/07/14(木) 21:07:53.13
>>845 ばらばらで意味があったのかorz
ありがとうございます。
Railsのプロジェクトに入ってruby勉強することになったんだけど、Railsのソースが無茶苦茶過ぎる。 標準クラスを拡張しまくってるからRubyのバージョンアップに対応できなさそう。というか怖くてバージョンアップできない。 スクリプト言語にこんな馬鹿デカいフレームワークが受け入れられている理由が全く分からん
RailsはRubyから派生した別言語だよ
>>847 お前には使いこなすだけの能力がないってことで
残念でしたね
850 :
小池陸 :2011/07/15(金) 23:52:59.93
うわあああ 三国志のリクソンじゃないよ 小池陸だよ みんなあつまれ
851 :
小池陸2 :2011/07/15(金) 23:53:29.05
集まったよ わあ
852 :
小池陸3 :2011/07/15(金) 23:54:31.97
続編終わりました どうかRubykaigiにきてください おまちしていっ
853 :
小池陸4 :2011/07/15(金) 23:55:02.95
宇和ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
854 :
小池陸5 :2011/07/15(金) 23:55:18.65
ちょっとインクリメントしすぎたかな
近代デジタルライブラリーの画像をダウンロード出来るkindai.rbというスクリプトを使うためだけにRubyを導入したのですが 以下のエラーが出ますがどのようにすれば動きますか。 OS winxp32bit Ruby 1.9.2-p180 ImageMagick 6.7.1 Q16 C:\Ruby192>gem list *** LOCAL GEMS *** json (1.5.3) kindai (1.7.0) minitest (2.3.1, 1.6.0) nokogiri (1.5.0 x86-mingw32) rake (0.9.2, 0.8.7) rdoc (3.8, 2.5.8) rmagick (2.12.0 mswin32) rubygems-update (1.8.5) zipruby (0.3.6 mswin32) C:\Ruby192>ruby kindai.rb 聖中心道肥田式強健術 ruby: No such file or directory -- kindai.rb (LoadError)
C:\Ruby192>cd C:\Ruby192\bin C:\Ruby192\bin>ruby kindai.rb 聖中心道肥田式強健術 C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Co uld not find rmagick (>= 0) amongst [json-1.5.3, kindai-1.7.0, minitest-2.3.1, m initest-1.6.0, nokogiri-1.5.0-x86-mingw32, rake-0.9.2, rake-0.8.7, rdoc-3.8, rdo c-2.5.8, rmagick-2.12.0-x86-mswin32, rubygems-update-1.8.5, zipruby-0.3.6-x86-ms win32] (Gem::LoadError) from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:759:i n `block in activate_dependencies' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:756:i n `each' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:756:i n `activate_dependencies' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:741:i n `activate' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems.rb:1183:in `gem' from kindai.rb:18:in `<main>'
857 :
小池陸 :2011/07/16(土) 11:18:29.59
小池陸だよ サインほしい人 みんなあつまれ 早くしないと消えちゃうよ
>>855 C:\Ruby192ってことはRubyInstallerか
なんで初心者はmingw32使うかね
ああ、テンプレがないのか
初心者はmswin32(ActiveScriptRuby)使え
mingw32(RubyInstaller)は禁止
mingw32でRmagickを使うには
・ ImageMagick の dll とヘッダファイルつきの exe をどっかのパスにインストール
・ ImageMagick の include を環境変数 CPATH に、lib を環境変数 LIBRARY_PATH に設定
・ mingw32 Ruby のdevkit をインストール
・ gem で Rmagick をインストール
・ Rmagick のディレクトリで setup.rb
・ Rmagick のディレクトリで setup.rb install
というような手順が必要だったはず
つまり、全部自前でやる
今だと何か足りなかったり冗長だったりするかもしれないが
>>858 ああ、あれ荒らしが消したんよ
仕返しだな
【バージョンに関するよくある流れ】
Ruby 1.8.5(非安定板)→ Ruby 1.8.6(旧安定版、長期政権)→ Ruby 1.8.7(超お勧め)
Ruby 1.9.0(旧開発版)→ Ruby 1.9.1(旧1.9系列安定版)→ Ruby 1.9.2(1.9系最新安定版)
実のところ、よくできた教科書またはトラブル時に聞き倒せる師匠がいるなら 1.9.2 から入っても特に問題はない
1.9.2ユーザーの場合は「1.9.2使ってます」と断った上で質問してほしい由
【Windows版に関するよくある疑問】
初心者の人はとりあえず ActiveScriptRuby の 1.8.7 使っておけば間違いない(mswin32)
http://www.artonx.org/data/asr/ の題字のでかい 「ActiveScriptRuby 1.8.7(pなんとか) with-winsock2 tcl-stub」
マニュアルはWebで見ることもできるが手元にあると便利、1.8.7 の HTML ヘルプ版が
http://www.ruby-lang.org/ja/documentation/ の「Rubyリファレンスマニュアル刷新計画 chm版 1.8.7用」
夢のお告げ等、何かの間違いで Ruby の知識がない初心者時代から 1.9.2 を使いたいマゾい人は
http://www.artonx.org/data/asr/ の「Ruby-1.9.2-p数字 Microsoft Installter Package」
「Windows版Ruby」として紹介されることのある以下の「RubyInstaller」は
これ特有のトラブルの修復知識が必要なので今のところは初心者には勧めない(mingw32)
http://rubyinstaller.org/ このトラブルを回避できるようになったら初級者脱出かも
ActiveScriptRubyはアイコンがダサすぎるから入れないのが正解
862 :
デフォルトの名無しさん :2011/07/16(土) 20:18:12.59
サイボウズの方ですか?お疲れさまです
マルチだし宣伝ウザ過ぎるな。
何言ってんだよお前 matzが来るんだぞ 最重要事項じゃないか
きもちわりーんだよ あ?こら あまのかお前てめえ調子ノンなこら ネットギャングに県下うったのかあまのこら ぶちのめずぞあまの
ネットギャングwww乙
869 :
292 :2011/07/18(月) 06:36:27.05
大量にある日本語と英単語ありなテキストに指定桁数で改行を挿入したいです。 (nkfなどではダメでした。) 1.ファイルから一行を読みこむ。 2.先頭から文字を単位で読み込み。 行の先頭の改行はそのままにしたいので、 改行をchompするかは、とりあえずどちらでもいいとします。 2を行って英文字(ASCII)は一文字でカウント、 日本語は二文字でカウントしたいんですが、最適なメソッドってありますか?
map と collect ってどう違うのでしょうか? 使い分け方はあるのでしょうか?
同じ 気に入ったほう使う
>>871 おなじでしたか、ありがとうございます。
RubyでHello world出す方法どうやるんですか? 頭の脳みその神経が途切れて脳みそパーになりました 教えてくださいお願いします。
puts は使えるんですが、 print("2ちゃんねる") のように一行だけでしても、出力されません 何がいけないんでしょうか
もしかして: zsh
人のソースを見てると、たまに「$Id」という記号にぶつかります。 なんとなくバージョン管理しているんだろうなとは思うのですが、 どのように使っているのでしょうか?
ruby 1.87を使い現在このコードを使ってウィンドウズのコマンドプロプントで 文字化けしないようにしています。 class StdoutHook def write(str) STDOUT.write NKF.nkf("--ic=UTF-8 --oc=Windows-31J", str.to_s) end $> = new end rubyファイルはUTF-8で保存しています。 下の文字をウェブからNokogiriでとってきたのですが、 putsだと ソフトバンク(株)【9984】:株式/株価 - Yahoo!ファイナンス pだと ["\343\202\275\343\203\225\343\203\210\343\203\220\343\203\263\343\202\257(\346\ 240\252)\343\200\2209984\343\200\221\357\274\232\346\240\252\345\274\217/\346\24 0\252\344\276\241 - Yahoo!\343\203\225\343\202\241\343\202\244\343\203\212\343\2 03\263\343\202\271"] となるのですが、この数字の羅列はバイナリ文字列というものでしょうか? このバイナリ文字列から正規表現を使って"ソフトバンク(株)"と"9984"を抜き出したいのですが どのような方法がありますでしょうか?
定数 STDOUT は使用しない
暗黙の $stdout (つまり何も書かない)か、グローバル変数 $stdout を使う
まあ、
>>878 の場合は STDOUT と書くしかないんだけど、普通は使わないので他の人は「そんなのがあるんだ!」とか真似しないでくだされ
で、関数的メソッド puts と関数的メソッド p は動作も役割も違うし表示する形式も違う
そのへんは解説にきちんと書いてあるはずで、書いてないならその本燃やせ
puts obj はおおむね obj.to_s をそのまま表示する
ただし、obj が Array のように振舞える場合は each しながら各要素を to_s して表示する(1.8.x限定)
p obj は obj.inspect の結果をそのまま表示する
これは obj のクラスの作成者が「このクラスのオブジェクトの内容をデバッグ表示するときにはこうしたい」と思った形式で表示される
つまり、その戻り値が(Nokogiri の css メソッドか xpath メソッドを使った結果で)配列っぽいもので返っているのだろう
配列だから正規表現は動作しないよ
0要素目に欲しいデータ文字列が入っているなら [0] とかで取り出して使え
あと、最初にヒットしたものだけが必要なのなら Nokogiri で at 使っとけ
環境を再現できないのですが、 ソフトバンク(株) の部分は "\343\202\275\343\203\225\343\203\210\343\203\220\343\203\263\343\202\257(\346\240\252)" 9984 の部分は "9984" で良いのではないですか?
h = Hash.new([]) h[0] << 0 h[1] << 1 p h.default #=> [0, 1] defaultに代入してるわけじゃないのに、defaultの値が変わるのは何故なのでしょうか。
Array#defalut や Hash#default は単一のオブジェクトを示す
だから、代入してるわけじゃないというか、はっきり(自動で)代入してる
ああもう使いにくいなあこのページ
http://doc.ruby-lang.org/ja/1.8.7/class/Hash.html ずーっと下ると 「new(ifnone = nil) -> Hash」 と 「new {|hash, key| ... } -> Hash」 があるからそこ読んどけ
ご希望の "ハッシュ初期化" 動作は
h = Hash.new{|hash, key| hash[key] = []}
h[0] << 0
h[1] << 1
p h[0] #=> 0
で達成されるかと思う
h = Hash.new([]) とだけ書くと、配列オブジェクト [] が毎回使い回されてしまう
いけてないよな ホントはもっと使いやすいマニュアルあるんだろ
884 :
881 :2011/07/20(水) 15:03:16.40
>>882 ありがとうございます。
すっきりしました。
rubykaigiが最終回だったって本当?
Twitterで全ての日本語ツイートをクロールしたいのですが、どうすればいいですか? あるキーワードやユーザーを指定しての収集はできるのですが、何の縛りもないとなるとやり方がわかりません
・次にgoogleと提携します。
google社はtwitter社にすべてのツィートを利用する権利を1億ドルぐらい払ってただろ。
すいません全てのというかこれからアップされるものをリアルタイムに取りたいのです
わらかすな
tweepyなら楽勝
とりあえずTwitterのドキュメント読もうぜ。 何が必要かは書いてあるはずだから。
>>879 ありがとうございます。また違うやり方を考えてみます。
>>880 他の銘柄にも応用できるように正規表現を使いたかったのですが、どうもうまくいきませんでした。
ありがとうございます。
クズしかおらんな。低脳は回答すんな迷惑だから。
896 :
886 :2011/07/21(木) 04:02:52.27
できました。みなさんありがとうございました これアカウント停止とかならないですよね?(^^;;
対策何も考えてないなら アカウント停止もそうだがアクセスブロックされたりするんじゃね
sora_hが質問してるスレはここですか
899 :
886 :2011/07/21(木) 11:48:29.36
900 :
デフォルトの名無しさん :2011/07/21(木) 12:29:20.45
ActionView::Helpers::NumberHelperをウェブアプリではなく,通常のスクリプトで使いたい場合, どのようにすれば良いのでしょうか? require 'active_support/all' ActionView::Helpers::NumberHelper::number_with_delimiter 123456789 #->NameError: uninitialized constant ActionView include ActionView::Helpers::NumberHelper #->NameError: uninitialized constant ActionView 的なことをやってもだめでした。 Date.today.months_ago 3みたいなのができるので, 同じかんじでやってみようとしたのですが...
>>900 $ irb -ractive_support/all -raction_view/helpers/number_helper
> include ActionView::Helpers::NumberHelper
=> Object
で使えるようになるけど、区切りはロカール依存(小数点にコンマとか)なので、
i18n用の設定も必要だと思う。そのままだと
> number_with_delimiter(10000000)
=> "10000000"
とか…
903 :
デフォルトの名無しさん :2011/07/21(木) 14:22:16.54
>>902 マジ,サンキューです。
> number_with_delimiter 123456789, :delimiter => ","
=> "123,456,789"
でとりあえず使えました。
なるほど
require action_view/helpers/number_helper
これね。
904 :
886 :2011/07/21(木) 14:41:49.80
>>901 あーそういうのがやっぱりあるんですか。。どうしようわからない
下手すると不正アクセスだか威力業務妨害だか 以前あったよね図書館のサイトにうんたら
active script ruby で実行すろと C:\Users\Public\Desktop>ruby hello.rb ruby: No such file or directory -- hello.rb (LoadError) と表示され、実行できません。 hello.rbはしっかりと存在するのですが・・・ 一体何が原因なのでしょうか?
Desktopフォルダにhello.rbが存在しないのではないか とりあえずdirでDesktopフォルダに入ってるファイルを確認 C:\Users\Public\Desktop> dir
メモ帳で作ったので hello.rb.txt になっててなおかつ拡張子 .txt がエクスプローラの設定で見えないという説を押す
解決しました。 C:\Users\Public\Desktop ではなく C:\Users\名前\Desktop という自分の名前のフォルダにありました。 ありがとうございました。
>>909 あーw
Windowsのデスクトップは見かけ上一ヶ所だけど
実際は全ユーザ共有のディレクトリと、いちユーザ個人のディレクトリを
混ぜこぜで表示してるから気を付けてね
コマンドプロンプト使うなら dir /p コマンドで
そのディレクトリのファイル一覧を確認するクセ付けるといいよ
パブリックのデスクトップにファイル置かないなあ。紛らわしい。
1.9にバージョンアップしたらmbchar?メソッドがNoMethodErrorになってしまいました。 日本語と英語が混じった文字列の(見ため)の長さを取得するために、 str.each_char do |c| len += c.mbchar? ? 2 : 1 end こんな感じのソースを書いていたのですが、1.9ではどのように処理すればいいのでしょうか。 lengthメソッドはローマ字もマルチバイト文字も同じ1文字とカウントしてしまいます。
いちおう、ascii_only? というのが使えなくもない 1文字に対して ascii_only が true だったら 日本語環境で 1バイト幅だとみなしてよかろう irb> p "1234あいう".chars.inject(0){|r,s| (r += s.ascii_only? ? 1 : 2);r} 10 半角カタカナは false としか言ってくれないので、結局は ord とか使って判別しなければならないけど
始めたばかりの素人ですが質問させてください。 MacOS X snow leopard10.6.6を使っています。 ruby on railsをやりたくて、いろいろとやっていました。 script/serverでサーバーが起動しなかったので、 色々と試し各種インストールの途中からエラーが頻発するようになりました。 一旦リセットしたく思い、usr/local/bin にあったruby フォルダ まるごと管理者権限で削除しました。 すると、完全にどうしようもならない状況に陥りました。 また初めから Ruby1.9 Rails3 Gem 1.8.7 を入れたいのですが どのようにすればいいか、 かれこれ6時間ほど悩んでいます。 もうsnow leopardをクリーンインストールするしか方法がないのでしょうか? 色々と試しましたがコンパイル出来ないとかエラーが出たので readlineをインストールしようとしました。 しかし、その段階でもコンパイル出来ない!とエラーが出ます。 クリーンな状態にて Mac OS10.6で ruby on railsが使えるようになる 方法を教えていただけませんか? お願いします。
なんでRails3でscript/serverなんだい
917 :
912 :2011/07/22(金) 02:33:32.93
>>913 ありがとうございます。
うーむ、結構大変なのですね。その方法を使わせていただきます。
これも1.9で文字コード周りが色々変わった弊害なんですかね。。
>>914 >usr/local/bin にあったruby フォルダ
こんなのあったっけ?
>>914 OS のクリーンインストールをする必要はありません。
1. readline-6.2.tar.gz を入手します。
tar zxf readline-6.2.tar.gz
cd readline-6.2
./configure
make
sudo make install
これで readline はインストールできるはず。
(システム要求は autoconf 2.5 以上だけだと思う)
2. ruby-1.9.2-p290.tar.bz2 を入手します。
tar jxf ruby-1.9.2-p290.tar.bz2
cd ruby-1.9.2-p290
./configure
make
sudo make install
これで ruby と rails をインストールできます。
3. gem 本体を 1.8.5 にアップデートして rails 類をインストールします。
sudo gem update --sysytem
sudo gem install rails
4. あとは Rails3 のチュートリアルを参考にしていろいろ遊びます。
(sqlite3 本体と gem の splite3 ライブラリも必要かも)
WEBrick を起動する場合、Rails3 からは rails server で大丈夫です。
1.9.2 だと libyaml (psych用) や libffi (fiddle用) は不要だっけ?
ascii_only? はラテン文字に対しても false 返すぞ
Unicode で ZENKAKU 相当かどうかを返すようなメソッドはあってもいいとは思う
曖昧幅の場合なんて答えたらいいのかは知らん
>>920 rvm で自力コンパイルする場合は、libyaml はあったほうがいい(バイナリパッケージでは不要というか無意味)
最近は require 'psych' を一度試す gem が増えてきた
922 :
デフォルトの名無しさん :2011/07/22(金) 13:32:45.38
>>919 非常にわかりやすい解説を
ご丁寧にありがとうございます。
2のruby1.9.2のセットアップ時に以下のエラーが出て1.9が入れられません。
どうすればよいのでしょうか?
(ちなみにインストールしているファイルは
<URL:
http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.bz2 > です)
gcc -dynamic -bundle -o ../../.ext/x86_64-darwin10.6.0/tcltklib.bundle stubs.o tcltklib.o -L. -L../.. -L/System/Library/Frameworks/Tcl.framework -L/System/Library/Frameworks/Tk.framework -L.
-L/usr/local/lib
-lpthread -framework CoreFoundation -F/System/Library/Frameworks -framework Tcl -lpthread -framework CoreFoundation -framework Cocoa -framework Carbon -framework IOKit
-lpthread -framework CoreFoundation -F/System/Library/Frameworks -framework Tk -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace -lm -ldl -lpthread -ldl -lobjc
ld: in /usr/local/lib/libxml2.2.dylib,
file was built for i386 which is not the architecture being linked (x86_64)
collect2: ld returned 1 exit status
make[1]: *** [../../.ext/x86_64-darwin10.6.0/tcltklib.bundle] Error 1
make: *** [mkmain.sh] Error 1
コンパイルしたことのない人は自力でコンパイルなんてしたらだめだぞ
--with-out-ext=tk 付きで./configureして再コンパイルで。 OSXに付いてくるTcl/Tkはx86/x86_64/powerpc(Snow Leopardまで)の ユニバーサルバイナリなので、正しくそれとリンクするためにはRubyも ユニバーサルバイナリとしてビルドする必要があるんじゃないかな。 正直いろいろ面倒なので、Railsをやる上では間違いなく使わないであ ろうTkなんて外してしまうのが簡単だろう。
>>923 完全なrequirementsくらいは一発で表示されて欲しいと思うことはある
> ld: in /usr/local/lib/libxml2.2.dylib,
> file was built for i386 which is not the architecture being linked (x86_64)
これは libxml2 の x86_64 アーキテクチャとしての再コンパイルが必要
たぶんこのあと sqlite3 あたりも再コンパイルが必要だと思う
Tk 外すと libxml2 は要らないんだっけ?
すみません。理解したいのですが 何をどうすればいいか解りません。
927 :
デフォルトの名無しさん :2011/07/22(金) 13:59:21.59
>>920 と
>>921 libffi-3.0.9 と yaml-0.1.4 をインストールしてから ruby-1.9.2 をビルドしたら
各ラッパー(モジュール?)が作られてウマーになりました。
ありがと、ちゅっちゅっ。
Ruby1.9.2をまっこすXでコンパイルしてインストールする、とかいう解説がどっかにあるかと思う たぶんほぼ確実に同じとこで詰まってると思われるので、そこ参考にするといいかもしれん
あれ、なんかこう、バイナリパッケージとかないん?
Macだとxcode,gem,ruby,rails,その他各種などが強く連携しあってて どれか一つでもバージョンが違うだけでインストールすら出来ないのですね。 Windowsだとワンクリックインストーラーがあるだけに 比較してみるとMacでのRailsは導入だけでも敷居が高すぎるのですね
932 :
デフォルトの名無しさん :2011/07/22(金) 14:41:35.10
これまでの流れをまとめると
い) readline-6.2 と libffi-3.0.9 と yaml-0.1.4 と sqlite-3.7.7.1 を入手して
./configure
make
sudo make install
にてそれぞれをインストールし、下準備をする。
ろ) ruby-1.9.2-p290 本体のインストールでは Rails の使用が目的なので
./configure --with-out-ext=tk
make
sudo make install
のようにしてとりあえず Tk をはずしてビルドをしてインストール。
は)
>>919 にあるように gem 本体をアップデートして Rails を入れる。
ということなのでしょうか?
934 :
デフォルトの名無しさん :2011/07/22(金) 15:10:17.13
皆さん、ありがとうございます。
何とかRuby1.9.2とrails3.0.9とgem1.8.5 とそれぞれ最新版を入れることができました。
どこかのサイトに書いてあったとおり、そのままnginxというものを入れました。
これってブラウザで確認する際に一般的に使用するサーバーソフトですか?
railsだと script/server ってコマンドだけでサーバーが立ち上がると
いろんなところに書いてあるのですが立ち上がらず、調べてみると
rails3.0からは rails s のコマンドでいいとのことですが
それをして
http://localhost:3000 へ繋いでもうまくいきません。
936 :
デフォルトの名無しさん :2011/07/22(金) 15:15:56.39
rails server とターミナルに叩いても下記のメッセージが出るだけで
http://localhost:3000 にアクセスしても何もでません。
Usage:
rails new APP_PATH [options]
Options:
-r, [--ruby=PATH] # Path to the Ruby binary of your choice
# Default: /Users/taro/.rvm/rubies/ruby-1.9.2-head/bin/ruby
-d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite3/frontbase/ibm_db)
# Default: sqlite3
-b, [--builder=BUILDER] # Path to an application builder (can be a filesystem path or URL)
-m, [--template=TEMPLATE] # Path to an application template (can be a filesystem path or URL)
[--dev] # Setup the application with Gemfile pointing to your Rails checkout
[--edge] # Setup the application with Gemfile pointing to Rails repository
[--skip-gemfile] # Don't create a Gemfile
-O, [--skip-active-record] # Skip Active Record files
-T, [--skip-test-unit] # Skip Test::Unit files
-J, [--skip-prototype] # Skip Prototype files
-G, [--skip-git] # Skip Git ignores and keeps
Runtime options:
-f, [--force] # Overwrite files that already exist
-p, [--pretend] # Run but do not make any changes
-q, [--quiet] # Supress status output
-s, [--skip] # Skip files that already exist
Rails options:
-v, [--version] # Show Rails version number and quit
-h, [--help] # Show this help message and quit
以下略
うむ、Railsそのものに関してはRailsスレに行ったほうがうまく説明してくれるかと思う ここはRails使ってない人のほうが多いんじゃないかね
まぁ、移動して欲しいけど、とりあえず。 * nginx は開発に使うだけなら不要。 * rails server は、作成したアプリのディレクトリで実行する。
939 :
デフォルトの名無しさん :2011/07/22(金) 15:39:18.02
スレ汚し申し訳ありません。 色々とご教授いただきありがとうございました。
guides.rubyonrails.org/getting_started.html を参考にするといいよ。
Rails が動くかどうかの確認をしたいのであれば
rails new blog
cd blog
bundle install ← ここはちょっと時間がかかるので筋トレをして待ちます
rails server
を順次実行していく。ターミナルに
=> Booting WEBrick
=> Rails 3.0.9 application starting in development on
http://0.0.0.0:3000 => Call with -d to detach
=> Ctrl-C to shutdown server
が表示されていることを確認してからウェブブラウザでアクセス!
あとは Rails スレで勉強するなりよ。
皆さん本当にありがとうです。 さっそくrailsスレへ書き込みさせていただきました。 ブラウザで表示されるようになるまで あと少しのところなので頑張ります! もう一度ありがとうございます。
>>933 ホントよ
「sudo port install ruby」の一行打てば、あとは勝手に
Rubyのソース落として依存するライブラリとかも全部落として
全部コンパイルして所定のディレクトリに配置するとこまで勝手にやってくれる
要はLinuxによくあるパッケージマネージャのMac版
他にもfinkとかhomebrewってパッケージマネージャがあるので
何らかのパッケージマネージャ入れておくとUnix系アプリの管理が楽だね
>>917 もともとSJISの文字列か
SJISの範囲で収まるのならSJISに変換してから
String#bytesizeしてみてはどうか?
mbchar?は何か理由があって廃止されたの?
String#mbchar? は jcode.rb が提供していたメソッド。 jcode.rb 自体が1.9系ではEncodingの導入に伴い廃止。 1.8から持ってきて、 $KCODE 使ってる箇所を書き換えれば使えそうな気もするけど。
>>945 おおなるほど。だから1.9の弊害みたいな話が上であったのね。
やっと意味が分かった。
948 :
デフォルトの名無しさん :2011/07/22(金) 23:05:04.31
macportsよりhomebrewの方がいいと思う。
# あるファイルの内容を読み込んで置換して別のファイルに書き込む際、 # 置換の設定を別のファイルから読み込んで処理したいのですが、 # どうすれば良いでしょうか。 # # 仮に次の四つのファイルがあるとします。 # # 1.処理内容.rb (プログラムの本体) # 2.入力元.txt (infile) # 3.出力先.txt (outfile) # 4.置換設定.rb (setfile)(置換の設定,これを読み込んで処理したい) # # 以下が具体例です。 # #「1.処理内容.rb」の内容---------------------------------- def infile ; infile = '2.入力元.txt' end def outfile ; outfile = '3.出力先.txt' end # def setfile ; setfile = '4.置換設定.rb' end open(infile, 'r'){|origin| open(outfile,'w'){|output| while line = origin.gets #↓この部分の処理を別のファイル(4.置換設定.rb)で行いたい line.gsub!('●','丸') line.gsub!('へのへのもへじ','ヘノヘノモヘジ') line.gsub!('漢字','kanji') #↑この部分の処理を別のファイル(4.置換設定.rb)で行いたい output.puts line end } } #----------------------------------------------------------- # # どうか知恵をお貸し下さい。お願い致します。
ファイル読める知識があるのなら、置換ペアのファイル読んで内容の文字列をペアで指定すればいいだろ プログラムがファイルに分離してると考えないほうがいい …いや、考えてもいいけど、それはそれで最初はめんどくさいぞ
>>950 置換設定.rbで
def process_line(line)
line.gsub...
return line
end
として、メインプログラムで
while line = origin.gets
line = process_line(line)
output.puts line
end
とすればいいんじゃないかな。
できれば
origin.each do |line|
line = process_line(line)
output.puts line
end
のほうがいいけど。
その0:文字列を置換して表示する str = "1234" str.gsub!('1', 'ワン') str.gsub!('2', 'ツー') str.gsub!('3', 'さん') puts str その1:配列でgsubをまとめる str = "1234" replace_pairs = [['1', 'ワン'], ['2', 'ツー'], ['3', 'さん']] replace_pairs.each do |pair| str.gsub!(pair[0], pair[1]) end puts str その2:配列を外部から入力させてみる str = "1234" replace_pairs = [] File.open('replaces.txt','rb').readlines.each do |line| replace_pairs << line.chomp.split(/\t/) end replace_pairs.each do |pair| str.gsub!(pair[0], pair[1]) end puts str
その3:なんかタブ区切りがやたらとめんどくさかったのでYAML形式にする
require 'yaml'
str = "1234"
replace_pairs = YAML.load_file('replaces.txt')
replace_pairs.each do |pair|
str.gsub!(pair[0], pair[1])
end
puts str
# replaces.txt は --- で始まる
---
- ['1', 'ワン']
- ['2', 'ツー']
- ['3', 'さん']
その4:できた気がするので、ファイル入力とファイル出力も作る
require 'yaml'
input_path = 'input.txt'
output_path = 'output.txt'
replace_data_path = 'replaces.txt'
replace_pairs = YAML.load_file(replace_data_path)
str = File.open(input_path, 'rb'){|f| f.read}
replace_pairs.each do |pair|
str.read.gsub!(pair[0], pair[1])
end
File.open(output_path, 'wb'){|f| f.write(str)}
ぶっちゃけどっちもどっちだと思うので、
>>952 のようにでっかい置換データを内部に持つ関数的メソッドを作って require するのでもいい
>>953 横からなんですが、その2でオープンしたファイルは自動でクローズしているのでしょうか?
File#readlinesだから、File.readと同じ理屈でメソッド内部で閉じてる ファイルが大きい場合にはメモリを占有するのもFile.readと同じ
>>950 です。皆さんどうもありがとうございます。
>>952 さんの内容で望んだ通りの動作になりました。
僕には本格的なプログラムを組めるスキルは無いので、
ファイル数は増えてもシンプルな
>>952 さんの遣り方でやらせて頂きます。
採用は見送らせて頂きましたが、
>>953 ,
>>954 さんもありがとうございました。
わざわざサンプルを書いて下さったそのお気持ちに御礼を申し上げます。
本当に助かりました。深く感謝します。 m(_ _)m
>>956 マニュアルのIO#eofのコード例では、readlinesしあとでも使えてるので、closeしてないように思うのですが、
どうでしょうか?
f = File.new("testfile")
dummy = f.readlines
f.eof #=> true
File.readlinesなら閉じるては思いますが。
>>956 いや、閉じてないよ
開きっぱなしで放置してるよ
GCされるときに、閉じられるのでしょう
File.readlines() じゃなくて
File.open().readlines() してるのだから
AptanaStudio3でRubyのスクリプトをCtrl+F11を押して実行すると d:\Ruby\bin\rubyw.EXE: No such file or directory -- Studio (LoadError) というエラーが出て実行できないのですがどうすれば良いでしょうか?
たのしいRubyと初めてのRubyを読み終えたんですが,
未だにブロック,yield,Proc,Enumerableが理解できません(;´Д`)
>>2 にもいくつか挙がっていますが,次に読むとしたらどの本がいいですか?
おすすめがあったら教えてくださいorz
君がこれまでに書いたプログラムを挙げなさい 挙げることができないなら、それが答です
まー日常たいしたことないスクリプト書いてるだけならブロックの理解もそれらの使用も必要ないからな それだけでいいという考えかたもある こんなん所詮プログラム言語に過ぎない 学校の勉強や試験のやり方なんて忘れろ 全部読む必要もないし全部覚える必要もない ただ、どうしても気になるんだったら、他の誰かのプログラムを読んでみるといい 変な癖がつく可能性があるので、興味のある分野のいろんな人のをたくさん読むこと
プロックとブロックとyieldは根っこ一緒な気がする とりあえずブロックつきメソッド作るべし 使わないなら使わないでもけっこうなんとかなるので、忘れてしまうというのも手っちゃ手だ
プログラミング言語Rubyがオススメ
理解できません、の一言じゃアドバイスのしようが無いね。 頑張って理解してください、ぐらいしか言えない。 もう少し質問力をつけた方がいい。
ブロック,yield,Proc,Enumerableの説明が詳しい本 紹介すればいいだけだろ 何が質問力だよ
次の方どうぞ〜
Ruby のスレのひとってどこも冷たいひとが多い
>>961 >未だにブロック,yield,Proc,Enumerableが理解できません(;´Д`)
Procでは、何らかの処理をオブジェクトにできる。
data = proc {|x| puts "x=#{x}" }
data.call(123) #=> x=123
Procを使うと、メソッドの引数に処理を渡せる。
def foo(val, data)
data.call(val)
end
foo(123, proc {|x| puts "x=#{x}" }) #=> x=123
これをスマートに書くと、yieldとブロックを使う書き方になる。
def foo(val)
yield val
end
foo(123) {|x| puts "x=#{x}" }
それから、Enumerableについては、ただの多重継承だから難しくないはず。
Enumerableが難しく思うのは、ブロックとyieldが分かってないだけ。それがわかればEnumerableもすぐわかる。
どう、わかった?
>>961 >>961 ソンナコトイワナイデ!
def foo(val) yield val end foo(123) {|x| puts "x=#{x}" } fooは引数をvalだけ受け取っているのに、 なぜ、 {|x| puts "x=#{x}" }も渡されてんの? def foo(val, *****) みたいな書き方にならないのはなぜ?
def foo(var &block) block.call(var) end という書き方あるよ
>>960 ・d:\Ruby\bin\rubyw.EXEはインストールされていますか?
・Rubyで実行したいファイルのパスに日本語が含まれていませんか?
・ユーザー名が日本語ではありませんか?
・Aptana3以外では動きますか?
>>972 >fooは引数をvalだけ受け取っているのに、
>なぜ、 {|x| puts "x=#{x}" }も渡されてんの?
>
>def foo(val, *****)
>みたいな書き方にならないのはなぜ?
そういう文法だから。
foo(123, proc {|x| .... })
が格好悪いから
foo(123) {|x| .... }
と書けるような文法にした。それだけのこと。
イテレータを実装したくてこうなったんだよね まあうまく考えたもんだ この二重引数構造には元ネタがあるの?
そろそろ次スレ希望
なんか僕の悪口いってるひといました スレみたら誹謗中傷だらけでした やっぱりなあって思いました 7歳無職でなじられてました 2chみました 心がつぶれました 悔しくはない
昔はブロックをイテレータ、と呼んでて、それはイテレータを実装する経緯で発生した機能という 歴史的経緯によったものだったんだけど、一般的なデザインパターンの用語と合致しないんで 歴史を共有してない人達には理解しがたい名前だったんで呼び方を変えた、とかそんな流れだったか
>>976 イテレータの定義構文やyieldはCLUを参考にしているはず。
見た目が格好悪いからって理由でヘンチクリンな構文作って 初級者その他を惑わしたあげく、何のメリットも無いとか 馬鹿じゃねーの
糖衣構文否定派? 一種の過激派だな
引数リストの中に直接書くとHashリテラルと紛らわしいから外に出したんでしょ
LLバトロワスレでやれ
>>972 ブロックは一番最後の引数になるのと1つしか取れないから省略可能にしたんじゃないかな?
Enumerableって何て読むんですか? エナムラブル?
えにゅめらぶる
990 :
960 :2011/07/26(火) 01:13:49.06
>>974 ・d:\Ruby\bin\rubyw.EXEはインストールされていますか?→されています
・Rubyで実行したいファイルのパスに日本語が含まれていませんか?→含まれていません
・ユーザー名が日本語ではありませんか?→半角英数です
・Aptana3以外では動きますか? →動きました
その状態で暫くAptana3を使っているとアウトラインウィンドウにもエラーメッセージが表示されるようになり
Aptana3を再インストールした所、エラーは出なくなりました。
原因はわかりませんでしたが解決しました。ありがとうございました。
C言語のenumをエナム、イーナム、とか読んできたからなぁ。エニュムとはあまり読まなかった気がする。
enum、いにゅー↑、いにゅ↑、いぬ!、わんこ!、わんわんお!
Cのenumとは別物だろw 同じ発音で言われたら逆に混乱するわ
enumerate 数える、列挙する enumeration 列挙 で、何が別物だって?
Cのも略さずenumerationって発声したほうが変な風に覚えなくていいかもしれない
略語なりの読み方でいいだろ int は『イント』 char は『チャー』なんだし、enum は『イナム』でいいよ
charは「キャラ」じゃないのか? 少なくともうちの会社では「キャラ」って呼び方で統一されてる。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。