2 :
デフォルトの名無しさん :2011/10/05(水) 13:52:45.05
ゴミ
Railsは板違い と書いておけば目立つだろうか 日常的に使ってる人も少ないし、初心者に教えられるような人も少ないので、 素直に専門でやってる人の集まるWebProg板に行ったほうが吉
機能してないってほどではないけど むしろ最近超絶教えて君が毎日やって来るのが超絶ウザい Railsボットお断りスレとRails初心者スレが必要だな
あんまりム板の管轄ではないというのは事実 誘導先の板のスレがどうなってるかは、そりゃ、その板とそのスレの自治だろう
Railsの質問に来る人なんて1スレに数回くらいなんだから、そのたびに誘導してやりゃいいだけじゃん
配列を配列の配列にするのって簡単にできる? [1,2,3,4,5,6]を[[1,2],[3,4],[5,6]]みたいにしたい
>>11 こんな感じ?
[1, 2, 3, 4, 5, 6].enum_slice(2).to_a
>>12 まさしくそれ!ありがとう
そうかArrayだけじゃなくてEnumerableも探さなきゃいけないんだな
a,$b,c=1,2,3 puts "a,$b,c".split(",").map{|i| "#{i}=#{eval i}"}.join(",") # ==> a=1,$b=2,c=3 このデバッグプリント関数なんとかラップできないですか
()必須になる上にevalは消しようがないのか… def dbputs(s) puts s.split(',').map{|i| "#{i}=#{yield i}"}.join(',') end dbputs("a,$b,c"){|i| eval i}
ソケット通信のコードの解説をお願いいたします so = TCPSocket.open(ip,port) s.print "文字列" s.each("\0") do |line| p line end 3行目のs.each("\n") do |line|がよくわかりません eachのカッコ内の\nは何の意味がありこれを書くことによってどのようなことが行われるのでしょうか?
def dbputs(&blk) puts blk[].split(",").map{|i| "#{i}=#{blk.binding.eval(i)}"}.join(",") end a,$b,c=1,2,3 dbputs{ "a,$b,c" } 見た目違和感あるけどこんな感じなら
a,$b,c=1,2,3 class Binding def dbputs(s) puts s.split(",").map{|i| "#{i}=#{self.eval(i)}"}.join(",") end end binding.dbputs("a,$b,c") なんちゃって JRubyで実装しにくいから却下されたという Binding.of_callerが必要になるやつだねぇ もしあればdbputs("a,$b,c") ですませられるのだろうけど 現状だと、何らかの方法でbindingを渡さないとならん
文字列の最後の文字が特定のものだった場合、それを消すという処理をしたいのですが if s[s.split(//u).length] == "/" s= s.split(//u)[0..-2].join end 上記でやっても上手く処理されません。 文字列は2バイト文字で、中に記号なども含まれます。 文字コードはUTF-8です。
irb> puts "ねここ".chomp("こ") ねこ
こんなにも…あっさり… 検索しながら1時間以上悩んでたのが馬鹿みたいでした。 どうもありがとうございます。
結構トリッキーじゃね? "こ"を改行とみなして取り除くって
irb> puts "ねここ"[-1] こ
>>24 違う
String#chomp は引数文字列を末尾から取り除いて新しい文字列を返す(末尾が該当しなければ、なにもしない)というメソッド
引数が無かった場合、$/ を取り除こうとする
さらに、$/ がデフォルトの $/ と同様だった場合には、特別に \n と \r と \r\n の3種類を対象とする
perl の chomp とはコンセプトからして既に別物
27 :
デフォルトの名無しさん :2011/10/07(金) 20:37:25.37
x.sub!(/¥/¥z/, '')
9割以上が、引数付けないで、改行を削除するのに使ってると思うけど
Perlのchompがそうだからな chopもあるよ
>>29-30 実際に使われている用法がどう、という話ではない
メソッドの定義と記憶法の話
「chompは文字列末尾に改行があれば取り除く」と覚えていた場合、5分で
>>22 はまず出てこない
これは明らかに「String#chompは引数文字列(がなければ改行)を末尾から取り除く」と記憶していたということだろう
そして、たぶん、そのほんのちょっとの手間で大幅に融通がきく
String#subと正規表現使うほうが汎用的でなおかつ生まれて初めて見るchompの引数つき動作なんかより一般に一発で理解されるんじゃねーかとかいう話は
めんどくさい比較になるので今回はしないw
…まあ、String#chomp 自体、あんまりいいデフォルト動作規定ではない いわゆる chomp の動作にするためだけにすっごい頑張った形跡がありありと見える 引数なしの時に $/ が関わっているということを知ってる人がどれだけいるのやら
Perlとか1.6のchompを知ってる人にそういうこと言うのはアイタタだぞ
古いgemをcleanupしようとしているのですが You have requested to uninstall the gem: rake-0.8.7 RedCloth-4.2.8 depends on [rake (~> 0.8.7)] jk-ferret-0.11.8.3 depends on [rake (>= 0)] rack-1.3.4 depends on [rake (>= 0)] rack-mount-0.8.3 depends on [rake (>= 0)] railties-3.1.1 depends on [rake (>= 0.8.7)] sprockets-2.0.2 depends on [rake (>= 0)] thor-0.14.6 depends on [rake (>= 0.8)] treetop-1.4.10 depends on [rake (>= 0)] といわれます。 インストールされているのはrake (0.9.2, 0.8.7, 0.8.3)なので、 RedCloth等の依存を0.9.2にしたいのですが、その方法を教えてください。 gem updateを試したのですが、変化ありませんでした。 ちなみに(~> 0.8.7)とか(>= 0.8)の意味は?必要とされるバージョンだと思っているのですが? 環境は - RUBYGEMS VERSION: 1.8.11 - RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
根本的には該当ライブラリ本体を対象gemで動作するように書き換えるしかない バージョン番号さえ書き換えれば動くということがわかっているのならredcloth.gemspecのバージョン番号を書き換えればいい でもたぶん動かないと思う
>>34 依存してるのなら残しておいたらいいじゃまいか
>= 0.8.7は0.8.7以上
~> 0.8.7は0.8.7以上0.9未満
凄い初歩的な質問で恐縮なんですが、例えばtest.rbの中身を print "こんにちは世界!" にしたとして、これを実行するにはどうすればよいのでしょうか? とりあえずrbをC:\Ruby192\bin\Ruby.exeに関連付けて実行すると 一瞬だけcmd.exeが立ちあがって消えてしまいます。 とりあえずbatを作って、そこに ruby test.rb pause と書いて、これを実行するとcmd.exeは立ち上がるのですが test.rbがuft-8だと文字化けしていて、Shift-JISだとエラー文がでます。 エラー文の方が対応できると思い表示された rb:1: invalid multbyte char (US-ASCII) これから検索して1行目に # -*- coding: utf-8 -*- を挿入すると今度は rb2: invalid multbyte char (UFT-8) と出てきて、よしそれならと文字コードをUFT-8に変更してみたのですが やっぱり文字化けしています。 質問内容は1段落目になります。win7を使っています。 どうかよろしくお願いします。
いちばん説明めんどくさいパターンだな まず、どうでもいいレベルだが、Rubyでは文字列の出力はprintよりはputsを使う 出力末尾の改行を精密に制御しなければならない場合にのみ、printを使う (だから、Rubyユーザーはprintがあるとその文字列の改行の処遇に注目する) WindowsでRuby1.9.2を使ってるようなので、コマンドプロンプトへ出力される日本語文字列のEncodingはWindows-31Jでなければならない まあ、Shift_JIS名義でも困ることは少ないんだけど(ないわけではない) スクリプトファイルに記述される日本語そのものは、マジックコメントと合致さえしていればなんでもよい # -*- coding: Windows-31J -*- とマジックコメントして日本語を Windows-31J で書こうが、 # -*- coding: Shift_JIS -*- とマジックコメントして日本語を Shift_JIS の範囲だけで書こうが、 # -*- coding: utf-8 -*- とマジックコメントして日本語を UTF-8 で書こうが、実行に問題はない ということで、必要なのは、出力する文字列オブジェクト(Stringオブジェクト)のEncodingをWindows-31Jに変換する手段 これには String クラスの encode メソッドを使う # -*- coding: utf-8 -*- puts 'こんにちは世界!'.encode('Windows-31J') んで、ダブルクリックしても黒い画面が一瞬出るだけ問題は結構根深いんだけど、 ふつうは、コマンドプロンプトを開いておいて、ruby aaa.rb と打ち込んで実行して、次回からは↑キーで履歴呼び出してそのままEnterしたりする 実行のたびにマウス持って aaa.rb をダブルクリックなんて普通はしない
いつになったらユニコード出力に対応するのか
それはまいくろそふつさんにきいてください
いやいや、ずっと前に作ってあるのに取り込まれてないでしょ
win32-unicode-testとか何だったのか
>>38 文字コードのそれぞれの対応文字も理解していないと厳しいのですね。
なぜかUTF-8では殆どの日本語が使えるイメージでしたが
'.encode('Windows-31J')をしないと駄目という事で、なるべく日本語は使わない方向で頑張ってみます。
また、UTF-8でもアルファベットと半角記号だけできちんと処理できない場合があったので
おとなしくShift-JISを使っていこうと思います。
ただ、これでないと駄目っていう文字コードが無い事をしれて良かったです。
ゆっくりになりますが、少しずつ文字コードを学んでいきたいと思います。
ご丁寧にありがとうございました。
nanocとかJekyllみたいな静的サイト作るものを探しているんですが ruby1.9.2(+windows)での使用感などの情報がまとまってるとこ知りませんか
そんなんめんどくさいし、毎回深く考えてる人なんてまずいないし、エディタ任せでいいよ ファイルが「Shift_JISで保存」されるならマジックコメントはWindows-31Jで、コマンドプロンプト出力時の変換は不要 ファイルが「UTF-8で保存」されるならマジックコメントはUTF-8で、コマンドプロンプト出力時の変換は全ての文字列に対して .encode('Windows-31J') いちいち .encode('Windows-31J') って書くのめんどくさい場合はファイルの保存自体をWindows-31J(一般的なエディタではShift_JIS)にしておくのが常道 めんどくさくない変換には別な方法もあるけど、ぶっちゃけ理解を先伸ばしにして負債になるだけなので今はおすすめしない
>>46 わざわざありがとうございます。そのようにしていこうと思います。
いろんなgem使うなら内部はUTF-8にしといたほうが結局は楽
>>45 nanocとかには興味はあるんだけど、日本語リソースは見たことがないな
自分で使うしかあるまい
Windowsで趣味でしかRubyを使ってないので すべてcp932で書いてるんですが WindowsでRubyのお仕事してる人はどうしてるんでしょうか? コマンドプロンプトでUTF-8の入出力するのは面倒そうだなぁ 使ったこと無いけど EmacsとかVimとかEclipseとかだと大丈夫なんでしょうか
コマンドプロンプトを経由することが致命的な用途にはRubyはそもそも使わないと思うなあ
>>49 個人ブログで数件だけですねnanoc
Getting Startedしかやってないけどよさげではある
1.9.2だとなぜかcompile遅いのが気になるけど
他のドキュメント読みつつやってみます
-Ecp932:utf-8だけで済むなら楽なんだけど 波ダッシュとかあるしねえ
1.9.3見たら、rb_w32_write_console入ってたわ これでwindowsでもおkじゃん
undefined method 'each_line' for #<Array:0x3242c90> とでるんですが、どういう意味でしょうか?
Array(配列)にeach_lineなんてメソッドは定義されてませんよという意味 StringやIOには定義されてるので "abc\ndef\nghi".each_line{|line| puts line } とか open(FILENAME){|f| f.each_line{|line| ... } } ならOK
そのままです Arrayには each_lineメソッドが定義されてません (にもかかわらずArrayオブジェクトのeach_lineメソッドを呼び出そうとしていますエラー) Array.new.each_line や [].each_line などとすれば同じエラーが出ます エラーの出た行にある hogehoge.each_line みたいな記述があり その hogehoge にArrayが入っています hogehogeの中身がどこからやってきたのかチェックしましょう
>>56 ,57
ありがとうございます
では配列にeach_line的なこと(C#のforeach?)をするにはどうするんでしょう?
コピペしたソースが
header_list.each do |header|
ってなってたんですが、配列にメソッド追加とかできるんですかね?Rubyって
ごめんなさい、エラーだしてたところが違いました include WEBrick req = HTTPRequest.new(@config) req.parse(sock)<=====================ここ ははは、お手上げです
ははは 帰れ
ある関数で @header = .... とインスタンス変数?に代入されてて、 その関数から戻ったら @headerがnil になってるんですが、原因として何が考えられますか?
実は代入してないかnilを代入してるか
これなんですか? =>
解決しました
Rubyのどこが直感的なのか?
66 :
uy :2011/10/12(水) 01:56:41.56
>>63 俺から言わせればゴミ
=> 二文字で1記号の役割もたせてるとかバカかと思う
OSとキーボードとIMEさっさと改造しろ
>>65 知らんよ
そう表現した人に直接聞け
素の文法レベルならともかく、第三者ライブラリ挟んだ時点で直感的もなんもないと思うけどな
68 :
uy :2011/10/12(水) 06:26:41.63
"Rubyバカにしてる子ってさ 変数に$ついてる言語触ってるって事だよね いちいちSHIFT+4キーおして $ 打ちまくってる感触はどう?", "これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような そんな言語使ってる奴ってどうみてもゴミだと思うんだけど もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの? そうか、二度と話かけんなよ",
スクリプト実行時、以下のエラーメッセージが出ました。 undefined method `Pathname' for main:Object (NoMethodError) 解決方法を教えてください。 OSはWinXPsp3 rubyバージョンはruby 1.8.4 (2005-12-24) [i386-mingw32]
レス番50あたりから音読
>>69 これって釣り?なんかバージョンがすげーピンポイントなんだけど
釣りじゃないならPathnameをPathname.newに書き換えるか
rubyのバージョンを上げる
res['content-type'] =~ %r!text/html! の%r!と末尾の!の意味がわかりません 教えてください
最低得点者を求める方法なんですが 最低が同点のときはすべて求める場合、以下のプログラムでOKでしょうか もう少しスマートな方法がありますか? ※playersの各要素は、得点を扱うインスタンス変数@scoreを持つオブジェクト score_min = 1000 result = [] players.each{ |player| score = player.score next if score > score_min if score < score_min score_min = score result.clear end result.push(player) } return result
>>78 そんな面倒なことはrubyでは普通しない
確認はしてないから動くか分からんけど
score_min = players.map{|i| i.score}.min
return players.select{|i| i.score == score_min}
>>77 ファイル右クリック=>プロパティ=>ブロックの解除
かな
select 厨がまた出たか Ruby ではおおむね find_all のほうを使う select と reject と detect と collect と inject がすべて同じ言語のコレクションオブジェクトにあって 使い分けしなければならないというのは初心者には酷だ
どうでもいいよ
いちいちmapで配列作らないと最小値が探せないというのはスマートとは言えないな
>>83 ん、別にいらないよ
p ['ccc','bb','a'].min_by{|x| x.size} #=> "a"
ブロック渡してもEnumeratorを返すようなmapがないのか。 mixとmax自体はEnumerable汎用なのに。
>>78 たぶん↓みたいにも出来る
players.group_by{|i| i.score}.min.last
>>86 group_by{|i| i.score} の返す値は i.score がキーの Hash だと思うんだけど、
そのばあいの min ってどういう挙動になるの?
88 :
87 :2011/10/12(水) 19:23:48.66
あ、 [i.score, score] が最小のものが選ばれるので、 実質的には i.score 最小のものが選ばれる、ということかな。
>>87 気づいたみたいだけど、単にキーと値の配列で比較されるはず
自分で言ってるけど、Enumerable を include したオブジェクトの each メソッドに対する単一のブロック引数がなにになるかによる {'k1' => 'v1'}.each{|e| p e} は ['k1', 'v1'] を表示するので、Hash の min はこの要素2の配列に対して <=> を試した結果だね
91 :
87 :2011/10/12(水) 19:38:33.10
ああなるほど、そのコレクションの each の実装によるのね。納得。
93 :
78 :2011/10/12(水) 23:19:00.56
ありがとうです group_byはおもしろいと思いました 最近のバージョンで搭載されたヤツですね 直感的にはselectかfind_allを使うほうがわかりやすいのかな
94 :
uy :2011/10/13(木) 08:40:59.38
for i in 0..3 の in ってさ、必要だったの? for 0..3 じゃだめだったの? これrubyらしくかくならこうじゃn for 0..3 do | i | それとも今後 for i or 0..3 とか for i and 0..3 とかでてくるわけなの?
> for 0..3 do | i | これがRubyらしいとか笑えるw
rubyのforはpythonからパクったの?
シェルスクリプトかも
>>94 (0 ... 3).each do |i|
でいいだろ
見えない人と会話しないでくらさい><;
100 :
48 :2011/10/13(木) 23:44:41.25
>>99 も又、さっきまで見えてなかった。
という訳で、99は再帰からの脱出条件を書くように。
制御構造のほうが好きや
102 :
デフォルトの名無しさん :2011/10/14(金) 03:51:34.12
README.mdというファイルを閲覧するアプリは何ですか?
めんどくさい質問だなあ たぶんgemのライブラリに入ってるやつだと思うんだけど 基本的には、テキストファイルとしてそのまま人力で読む MarkDown形式と呼ばれる記述法で、記号類は適度に読んだり読まなかったり gemのインストールでドキュメントのインストールを有効にしている場合はdoc/というサブディレクトリが作られているはずなので、 その中にreadme.mdをrdocとかyardとかで変換した結果のreadme.htmlがあるはずだからそれをWebブラウザで表示させてもいい
クラスやメソッドの直前に書く RDoc?の適切な書き方の例はないものでしょうか? 検索してみたんですが、各人好き勝手というか、これといった規則がないようで参考にならず せめて引数と戻り値ぐらいはJavadocのようにカッチリ書いておきたいのですが …Netbeans上でRubyスクリプトを書いてますが 補完時にRDocも表示してくれるものの、レイアウトが整っておらず読みづらくて便利さも半減で おそらく規則に従って書けば、と思うものの、その規則・書き方の例が見つからず… それとも今は yard とやらで書くほうがトレンドなんですかね?
105 :
デフォルトの名無しさん :2011/10/14(金) 14:14:51.33
スレ選べよ 何のために分かれてるんだ
rubyは学習し始めたばかりなんですが公式マニュアルみてもどうやってライブラリを使っていいのかわかりません PHPのマニュアルみたいにサンプル付きで書かれていればわかりやすいのですが Rubyで逆引きサンプル本みたいなのございませんか?
ございますよ?
メソッドのサンプルそのものはついてるんだけどね 初心者向け記述をなくすことで効率上げてるんだけど、初心者向け記述がないので初心者は読めない プログラミング言語マニュアルとして正しい方向性のひとつではあるが
空きポートのリストを知りたいと思っています。 netstatコマンドのような情報を取ってくる事ができるとベストなのですが いい方法はありますでしょうか?
puts `netstat` じゃダメ?
112 :
110 :2011/10/15(土) 12:12:30.48
レスありがとう。 クロスプラットフォームなライブラリがあったらなぁと思ったのですが やっぱ無いのかな
113 :
デフォルトの名無しさん :2011/10/15(土) 12:58:02.17
114 :
110 :2011/10/15(土) 19:15:29.73
ありがとう。 自分で適当にごまかすことにしました。
foreachに相当する書き方と for(var i =10; i>0; i--)に相当する書き方を伝授してください
[1,2,3].each{|n| puts n } 10.downto(1){|n| puts n } (10...0).eachのように書けたらしっくりきそうだけど
独特すぎて難しいですね 何でforeachとforを実装してくれなかったんでしょうか
for i in [1, 2, 3] print i*2, "\n" end
119 :
デフォルトの名無しさん :2011/10/16(日) 00:37:17.38
Rubyのforはあまりにも使わないので「こうだったかな」と 資料を確認したりirbで動かしたりしてみないと書けない。
retry使うためにfor使ったりする
>>117 いや、いわゆる従来のforやforeachも充分に独特すぎて難しいと思うぞ(特にfor)
Rubyの場合、枚挙はオブジェクト単位で考える
配列やHashなどの複数データのカタマリがあったのなら、それを全部順に取り出す場合、
arr.each do |e|
puts e
end
のように書く
そりゃまあ確かに、0から配列サイズsizeまでの整数を考えて、
arr[0]見てインクリメントさせてarr[1]見てインクリメントさせてarr[2]見てインクリメントさせてarr[size]までやるという考え方もあるが、
((xを0からsizeまで1ずつ増やしてarr[x]でアクセスできるようにするなんらかの機構)){
puts arr[x]
}
配列やHashなどが持つeachメソッドに枚挙機能が必ずついているRubyではそんな二重に手の込んだ面倒なことはしない
eachに聞けばそれで済むからだ
枚挙するデータのカタマリが存在せず、単になにかを10回繰り返したいような場合は
10.times do |x|
puts x
end
とか
0.upto(10) do |x|
puts x
end
とか書く
Iterationを枚挙って表現する奴はじめて見たww
eachをイテレーションって表現する奴まだいたんだwwww
>>122 横レスだが、iterateを枚挙でenumurateを列挙と訳すのは普通じゃないのかと....
じゃあ
>>122 はiterateを「自分の言葉」でどう訳す?
# 予想されるレス:iterateはイテレート、馬鹿じゃねーのww
ものすごく説明が下手だね
×みたいな特殊文字全部をデコードしたいんだけど1文字ずつ自分でやるしかない? & > < "だけならunescapseHTMLでできたが
ここもエンコードされるのか &times;ね
文字実体参照を本来の文字にしたいのだと推測 puts Nokogiri::HTML.parse('×').inner_text ×
>>128 nokogiriでできたのか
open-uriしか使ったこと無かったサンクス
結局、RDocの書き方については何のレスも貰えず 誰も使ってない・書いてないの? いくらなんでも「○○のソースが参考になる」ぐらいのアドバイスは貰えるかしらと期待したのに Rubyはドキュメント不足が問題視されてたようですが、遠因がここにもありそうですね ドキュメントを書かない人ばかりでコミュニティが形成されてるから、関連ツールを使ったことがなく、話題を振っても分からないので無視されるんでしょうか? この手のフォーマットなんて、「これに従って書いといてね」ぐらいで済む話なのに、それすら無いとは… こういうところの整備・ルール作りは、地味だけどボディブローのようにじわじわ効いてくるのに 所詮Rubyは、 ・使い捨てスクリプトを書くのが関の山 ・大規模開発では実用にならない ・玩具レベル、趣味で使う言語 なのですかね… まあ、そういうのも嫌いじゃないけど…
131 :
48 :2011/10/16(日) 09:49:25.39
2chで世界を知った気に成るってのも凄いな。
>>130 >結局、RDocの書き方については何のレスも貰えず
そんなものがあったら代替議論なんて出ずにRDocが今も使われていただろうね
なかったからこそ、プログラマブルなドキュメントとしてのRDocは終焉を迎えている
あと、レスが無かったのは自分で答書いてるからに過ぎない
> 大規模開発では実用にならない 開発するだけなら使えるよ。その後はいろいろ地獄だけど。
>レスが無かったのは自分で答書いてるからに過ぎない
うむ
>>104 書いておきながらまさかそれで止めるとは思わなんだ
ディスってるだけじゃ申し訳ないので… NetBeans上でそれっぽく表示されるRDocの書き方を色々試した結果を一応書いときます。下のような感じ # メソッドの説明文 # # == Args: # x,y:: 座標値 # == Returns: # trueならヒット,falseならヒットしてない def check_atari(x, y) とにかく色々な書き方を試したけど、「#」と「==」の間には1つ空白を入れないと反映されない あと、「::」の前は1つも空白をいれちゃダメで、「::」の後ろには1つ空白を入れないとダメ。インデントがおかしくなる もちろんこの書き方が正しいかどうかは分からない。補完時にそれっぽく表示されたのはこういう書き方だった、というだけの話。Netbeans特有の書き方なのかもしれない やはり正解というか、本来の書き方・規定・フォーマットが知りたい。でも、存在してないようですね…Rubyはフリーダム過ぎる
>>132 yardがトレンドなら「そうだよ。yard使えや」と一言レスつけてくれれば済む話じゃないですか…
誰も書かない=誰も知らないし分からないのだな、としか捉えようがないですよ…
でもまあ何にせよ、RDocだけじゃ厳しいという共通認識だったのですね
納得できました
あとは…Netbeans上でyardと連携できるかどうかを今後調べてみます
助言ありがとうございます
トレンドでもなんでもない 実質上の唯一解であるというだけで、特段勧めるものでもない おなたが求めるものはおそらくJavaで、それはおそらくJavaにしかない
そもそもIDE上でRubyスクリプト書いてる人がまずいないしな 連携が当たり前のようにどうこう言われてもわりと困る
>>130 (
>>104 )
マジレスすると、Rubyドキュメンテーションに標準の規則/規約は無い。
おそらく
>>130 はJava経験者で(JavaDocのような)明解な指針を期待していると思うけど、
残念ながらRubyコミュニティにそんな空気は無い。(少なくとも自分の知る限りでは....)
とりあえず注釈(annotation)を書けば、それをHTML化して読めるから嬉しいよね、というのがRDoc。
それでも、RDocは必要最低限の文書化に必要な要素は(それなりに)用意されている。
あとはプログラマ自身の文書化に対する意志にゆだねられている、というのがRuby文化。
もしも(JavaDocのような)RDoc注釈規約が必要としているなら、たとえば以下が参考になるかもしれない。
・Ruby × TPJ|高額合算システム(松江市様)
http://www.tpj.co.jp/ruby/case001_01.html ここからダウンロードできる開発規約の中には、RDoc注釈に関するガイドラインが含まれている。
ただしあくまでこれは参考だ。(個人的には部分的に異論があったりする...)
あとは
>>130 が責任を持つプロジェクトで、どこまで「文書化を重視」するかにかかっている、と思う
>>140 そのスレのは2年くらい前の認識で、
それから2年経って今は自力でコメント部分にタグ書いてHTMLマニュアルとしてきれいに出力することまではできてる
あと2年くらい経てばメソッド定義の引数とかから遡ってある程度テンプレートコメントが自動で作成されるようになるかもしれないし、
さらに2年くらい経てば他のプログラムとの連携もどうにかなるかもしれない
どっすか開発参加
>>141 たぶんそのライブラリも同じことしてるんだろうと思うけど
require 'Win32API'
Win32API.new('kernel32','SetConsoleTitle','P','I').call('hogehoge')
で、変えられるみたいですな
でもRubyが終了してもタイトルがそのままになりますね
別のアプリを起動したりして次にタイトルが書き換わるまでは
自分で元に戻す必要があるのかも
require 'Win32API'
Win32API.new('kernel32','SetConsoleTitle','P','I').call('hogehoge')
require 'Win32API' module WindowsConsole module_function def setConsoleTitle(title) _SetConsoleTitle = Win32API.new('kernel32','SetConsoleTitle','P','I') _SetConsoleTitle.call(title) end def getConsoleTitle() _GetConsoleTitle = Win32API.new('kernel32','GetConsoleTitle','PI','I') buff = "\0"*(32*1024) _GetConsoleTitle.call(buff,buff.size) buff.chomp("\0") end ORIGINAL_CONSOLE_TITLE = getConsoleTitle end END{WindowsConsole.setConsoleTitle(WindowsConsole::ORIGINAL_CONSOLE_TITLE)} WindowsConsole.setConsoleTitle('こんな感じかな') sleep 5
ちょっと間違ってました chompは改行コードしか削れないんですね chomp("\0")じゃ何も起こりませんので sub(/\0*\z/,'')に変えてください
>>145 >>chompは改行コードしか削れないんですね
嘘を書くな嘘を
二重に間違ってました、すいません chompは普通は一文字分しか削れないんですね 末尾の32キロバイトほどの\x0に大してchomp("\x0")してたので ぱっと見でなにも削れてないのかと思ってしまいました どっちにしろ末尾の \x0 の連続を削りたいのでchompでは駄目なわけですが rstripだと\x00だけじゃなく空白文字も削れてしまうし (というかそもそも空白を削るメソッドなので) やはり置換するしかないのでしょう るりまの説明で勘違いしてしまった >self の末尾から rs で指定する改行コードを取り除いた文字列を生成し返します。ただし、rs が "\n" ($/ のデフォルト値) のときは、実行環境によらず "\r", "\r\n", "\n" のすべてを改行コードとみなして取り除きます。 「rs で指定する改行コード」ってので chompは無引数でしか使ったことがなかったので詳しい動作を解ってなかったよ せめて「rsで指定する文字列を」って説明ならなぁ
>chompは普通は一文字分しか削れないんですね 引数で指定さえすれば何文字でも削れる ただし、「1回」しか削らない 末尾に連続してる不定個の文字を削りたいなら、やっぱsubするしかない
>>144 横からすまん
コード試したけど動かなかった
1.9.2
>>143 横からすまん
俺の環境では処理が終了したらタイトルも自動的に戻った
`title hello` でいいんでね
>>150 それだ!
WindowsAPIなんて使わなくてもよかったんだな
とほほ
>>149 1.9.2だと文字コードエラーか
先頭にマジックコメント
#coding:cp932
とかを追加すると動くはず
# coding: Windows-31J とcp932って違いますか?
153 :
uy :2011/10/16(日) 17:28:45.85
>>95 ハァ????????????wwwwww
お前Rubyのyieldすら理解していないの????????????????????????????????????????????
> for 0..3 do | i |
これを丁寧に書くと
for(0..3) do | i |
end
こうなるわけなんだけど 読める? ねえ これ読める????ヨメルノー??????wwwwwwはああああ????
何でこの程度で話しかけてくるんだろ
>>98 >(0 ... 3).each do |i|
それはない
Rubyつかってて誰もが経験したストレスがここにあるよ
0...3.each do |i|
これで動かないという・・・
いっそ
0..3 each do |i|
こうだと思う
154 :
デフォルトの名無しさん :2011/10/16(日) 17:29:18.72
enc/shift_jis.c > ENC_ALIAS("CP932", "Windows-31J") 同じ。
t = DateTime.new(2011, 10, 16, 18, 0, 0) now = DateTime.now # tより古い日時 p t - now tとnowを指定したフォーマットで表示する方法と tとnowの引き算の結果をタイムスタンプとして表示する方法を教えてください
同じなのもどうかと思うけど、同じという処理に確実になってるならそれはそれで
>>155 DateTime#strftime
157 :
デフォルトの名無しさん :2011/10/16(日) 18:21:17.55
後者はタイムスタンプじゃなくて(タイム)スパンというのかな。 長さ不定の年や月をどう勘定するのかよくわからんが。
時間範囲クラスというのは標準では無い うまくやってるライブラリもあまり知らない ActiveSupportにはあったはずなんだが
#coding:CP932 while 1 sleep 1 end ループ中にsleep 1を入れており、ctrl+zで終了すると C:/rubytest/test243.rb:3:in `sleep': Interrupt from C:/rubytest/test243.rb:20:3:in `<main>' ってエラーになりました ctrl+zを押して終了させたときにエラーが出ないようにする方法はございますか?
160 :
149 :2011/10/16(日) 18:36:43.45
>>150 'title hello'これすげえ
でも実行したら管理者: helloって表示された
Win32APIからだと管理者が表示されなかったから使い分けるのがいいのかな?
>>151 追加したら動いた
素晴らしい
162 :
デフォルトの名無しさん :2011/10/16(日) 18:51:03.25
>> require 'active_support/all' >> (1.year / 1.day).days => 365.25 days その端数をキープするなら 365.2422 くらいまで追求しろ、と思ってしまう。
>>161 これがでないようにするにはどうしたらよいですか?
rubyとみるとついrugbyに見えてしまう。
みえません。ぜんぜんみえません
>>159 begin
while 1; sleep 1; end
rescue Interrupt => e
$stderr.puts "caught Exception: "
# p e
end
なんで |a| みたいな書き方するんでしょうか? どんな利点があるんですか?
その記法はSmalltalk由来。それを受け継ぐRubyは由緒ただしいオブジェクト指向、とか悦に入ることができる。 明確な利点はないので、とりあえず気持ちいいとかわかりやすいか直感的とか言っとけばよい。
100/7みたいな計算式で小数点が発生するようなケースのときに自動的に小数点が削られるのは仕様ですか? やりたいこととしてはJavaScriptのMath.floorで小数点を削った値が欲しいので勝手に削ってくれるのは嬉しいのですが Rubyのバージョンによってこの挙動が違ったりしますか?
整数同士の計算は常に整数を返します 整数オブジェクトのメソッドは整数を返すという以上の深い意味はないです
了解しました
>>168 直感的ってそれだけの理由だったのか・・・orz
他言語触ってた俺からしたら気持ち悪さ満点やわ
たびたびすみません while 1 sleep 0.1 system "cls" end これで定期的に画面をクリアしているのですが画面がちらつくことがあります ちらつかないようにする事は難しいですか?
それは外部コマンドclsに文句言え 一般的にめんどくさくなるけどcursesを使って画面制御するという方法もある
clsはWindowsのcmd.exeのコマンドじゃまいか 一行だけクリアすればいいのなら loop { print Time.now; sleep 1; print "\r" } とかできるけど、数行とかそれ以上のことがしたいなら Ruby向けのライブラリを探すかWindowsのコンソール用のAPIを 使うはめになるんじゃないだろうか
\r便利ですねこんな裏技があるなんて知りませんでした
\rって改行なのにこれで消えるなんて不思議ですね
>>174 さんと175さんのも知識として調べてみます
>>168 Smalltalkで |a| は(Rubyにはない)テンポラリ変数宣言だから関係ないでしょ。
ブロック引数も [:a | a+3](Rubyの { |a| a+3 } に相当) みたいに縦棒は使うけどかなり違うし。
それとも、MatzがSmalltalkをよく知らずに勘違いして猿まねしたとか?
なになに?まさかのRuby起源主張?
Rubyはわしが育てた
181 :
デフォルトの名無しさん :2011/10/16(日) 23:00:22.40
CRは、復帰(タイプライターの打鍵装置を左端に戻す) LFは、改行(タイプライターの紙ロールを1行分送る) なので、行を改めて左端にタイプ位置を持っていくという意味にするには LFのみやCRのみよりDOS式のCR+LFが一番自然なんだよな…
自分はCRはMacの改行で LFはLinuxの改行で CR+LFはWinの改行を表すって覚えてました CRがそういう機能を持っていたのはためになりました system("cls")とsystem("clear")を使い分けずともCRで消せばクロスプラットフォームにコードが書け便利だと思えました
覚えていた内容は合ってるよ だから、CRで行頭に戻るのはDOS(windows)だけだ 残念ながらクロスプラットフォームにはならない CRがそういう”機能”を持っているんではなく 本来はそういう意味というだけ
>>165 そんなんでいいのか
Signal.trap(:INT){$stderr.puts "Interrupt!";exit(1)}
sleep 10
などと
シグナルトラップしないと駄目だと思ってた
そもそも語源が CR キャリッジリターン(carriage return) 行頭に復帰 LF ラインフィード(line feed) 行送り だからなぁ > CRで行頭に戻るのはDOS(windows)だけだ そうだったのか UNIX系だと 10.downto(0) do |i| print "\r%02d"%i sleep 1 end puts とかできないの?
バックスペース使えばいいのかな? 10.downto(0) do |i| print "\b\b%02d"%i sleep 1 end puts
>>182 散々説明されてるけどCRは行頭に戻るの意味。消すって意味じゃないよ
>>176 はTime.nowの返り値で上書きしてるだけ
消すなら空白を出力するなど工夫が必要になる
>>185 Linuxでもできるよ
bashで画面をクリアするには、clearコマンドを使うか、[Ctrl]+[l]キーを押す
bashとかcursesとかWindowsな初心者が目を回すのでそのへんでひとつ
>>190 Windowsなんか使ってる馬鹿のことなんて考慮する必要はない
馬鹿発見
>>139 >マジレスすると、Rubyドキュメンテーションに標準の規則/規約は無い。
>おそらく
>>130 はJava経験者で(JavaDocのような)明解な指針を期待していると思うけど、
>残念ながらRubyコミュニティにそんな空気は無い。(少なくとも自分の知る限りでは....)
えー?本気で言ってる?
昔はいざ知らず、今はRubyでもドキュメントをきちんと書いてる
プロジェクトのほうが多いよ。有名プロジェクトは特にね。
RDocの書き方がわからない人は、とりいそぎ
Ruby on Railsのソースを見ればいいんじゃないかな。
丁寧にドキュメントが書かれてあるよ。
>>194 君がJavaやってないのはよくわかった
javaは実際のソースよりjavadoc用のコメントの方が多いとかあるよな 特にプロパティの部分がつらい その代わり、ちゃんとしたドキュメントを提供してくれるわけだが
JavaDocって書いてあるんだから知らなければ調べればいいのに… どうせJavaのDocument書くコメントの略だろくらいにしか思ってないんだろうけど
Railsのドキュメントに関しては相当きっちりしてる 読むやつなんて少数派だろうけど
君がrdocを知らないのもわかったから、Java厨w
>>198 だから、メソッドやクラスの使い方を文章で書いてあることを求めてるんじゃないんだよ
必要なこと書かないで察してほしいとか思うのは、 ある種の病気だよ
年寄り連中は話がくどいな
[\x81\x40-\xFC\xFF] この正規表現名は何を表しているのでしょうか?
なんだっけそれ sjis?
206 :
デフォルトの名無しさん :2011/10/17(月) 23:51:46.01
そもそもRubyの正規表現で [¥x81¥x40]って ¥x81 と ¥x40 の並びに マッチするんだっけ?
+ 多バイト文字コードが指定されているとき、 文字集合の中で八進数または十六進数表現の連続は、多バイト符合で表現された 一個の文字と解釈される (例. [\xa1\xa2], [\xa1\xa7-\xa4\xa1])
自作のgemなどのライブラリで、ユーザー入力を解釈したデータ置き場が必要です ディレクトリ指定をどこにするのがいいんでしょうか? そもそもなにで設定させるべきですか?
>ディレクトリ指定をどこにするのがいいんでしょうか? 現状、特にはないので、ユーザーの指定がなければ動作しないようにするべき(またはTEMPに作っておく) ホームやカレントに .ライブラリ名/ とか勝手に掘ってそのままにするライブラリがたまにあるんだけど、超迷惑 >そもそもなにで設定させるべきですか? メソッド引数でファイルパスを指定 メソッド引数で設定ファイルのファイルパスを指定 またはコマンド引数で上記と同じようなことを制御 のどれか これまたたまーに、~/.ライブラリ名rc の存在を仮定したり勝手に作ったりするライブラリがあるんだけど、果てしなく迷惑
>>208 ライブラリでどうしても必要なら
Hoge.dir = '/hoge/hoge'
とかクラスのメソッドで指定した場合だけそこに書くようにすればいいんじゃね
設定ファイルを置いたりはアプリケーション側のことだと思うし
単なる「便利な」データファイル置き場もないんだよな gemのディレクトリにdataディレクトリ作ったら怒られるよねやっぱ
ほかのパッケージ管理システムにはそういうの用意されてるもんなの?
213 :
uy :2011/10/19(水) 14:24:53.47
ためしに片っ端からgemインストールしてみると トップディレクトリにすげー数のゴミフォルダが作られてるのな a とか b とかだよ c d f temp tmp ttt xxxxdf ggrinjeaftwau3ft4uehugekzvdxgomihasinererwhgbvv ゴミみたいな奴が作ったライブラリなんだと思う
>>212 そこはパッケージ管理システムの責務ではなくて、個々のライブラリがなんとかする問題じゃないかな
215 :
uy :2011/10/19(水) 18:31:36.63
質問です 2chに対策されてMechanizeからの書き込みが出来なくなりました ちょっとあるスレで特定人物のとあるゴミッカス野朗を晒し続けたいのにですが Mechanizeからの自動書き込みが出来ないとちょっとWin32OLEでIE起動してーとかいうかっこ悪いことになってしまうんですが 書き込めないのは僕だけでしょうか? みなさんは無事書き込めますか? 考えうる原因は3つありますが面倒なので、まだ試していません
217 :
デフォルトの名無しさん :2011/10/19(水) 18:44:21.52
584 :uy:2011/05/31(火) 02:08:25.67
はじめましてマ板、ム板、vipにて、uy( うゆ )というコテハンをやっている者です
13〜18歳のおにゃのこ(新品)にだったら手取り足取りRubyとかlambdaとか、世界の真理についても教えれるけど?
何作りたい? CGI? ゲーム? それともプログラミングだけおぼえたい?
2chでは漏れの事、バカにする奴多いけど、マジで技術高いよ?あと運動も得意です。昼でも、夜でも。
ちなみに両利き、好きなアニメは禁書目録、10万3000冊の技術書を読んでスペルインターセプトできるようになるのが夢
好きな語尾は「 ――だよ? 」 と 「 ――みさかはみさかは 」 です
[email protected] 22♂です
メールまってます
あと、部屋こんなんばっかりなので
こういうの大丈夫な子歓迎
http://www.geocities.jp/c_zelos/soto/heya0.jpg 自分でコスプレしようかなぁ・・・なんて本気で考えてた頃もあったんだけど、女装mixiコミュとかみたら、「やべぇwwwww」って思って
一線は越えない事にした、なのでイベントとかで何でもいいのでコスプレして一緒に周ってくれる人も、すごくすごく募集中です
ここ2年くらい実は、技術高めるべく超研究者モードだったのでイベント関係殆どいってないから今年はいっぱいいきたなぁ(**^^)キミと
スレ汚し、失礼しました
218 :
uy :2011/10/19(水) 18:45:31.57
へーぼくだけなんですか FOXはゴミッカス野朗ですね 正直イマドキ2chなんてなくても困らないんで別にいいんで 時期がきたら潰しますよ まあしいていうならニュー速VIPがなくなるのは残念なんですけどね ああいう場というのはなかなかネット上に出現しないカテゴリーです けれど解除しないつもりならいたし方ありません ぼくは2chの敵になるしかありません
219 :
uy :2011/10/19(水) 18:47:50.68
>>217 何それ?? 気に入っちゃってんの??
その程度の書き込みに芸術性を見てしまう程なの?
こいつヴィオラすら弾けないんだろうな・・・・・
キンモー☆
ヴィオラw
見えない人と会話しないでくらさい><;
>>219 おまえみたいなクソのせいでVPS置いてるネットワークごと規制されたりするんだぞ
やめろ
たのむからアレと会話しないで お願いだから 心の底からお願いだから
執着しすぎw
uyとかいうゴミクズをどうにかする方法はないでしょうか?
>>226 参照しないこと
参照する限りGCの対象にならない
'u'-'y'='C'-'G'
229 :
sage :2011/10/20(木) 10:57:07.36
以下のようなURLでサーバー側のerbスクリプトを呼び出す事は可能でしょうか。
http://localhost/test.erb?str=hello Webrickサーバー側で以下メッセージが出て止まってしまい困っているのですが
offline mode: enter name=value pairs on standard input
■test.erbのコード
<%
require "cgi"
cgi = CGI.new
str = cgi["str"]
return str
%>
そもそもこういった事は出来ないのでしょうかアドバイスお願いします
230 :
uy :2011/10/20(木) 11:55:20.92
<% require "cgi" ARGV.replace(["str=sine"]) cgi = CGI.new str = cgi["str"] %> <%= str %> <%= "gomi ha sine" %>
>>229 ARGV << "" # 空文字列を追加
require 'cgi'
cgi = CGI.new
...
でどうでしょうか。
232 :
uy :2011/10/20(木) 17:32:01.34
>>231 ハァ?????????
どう考えてもセキュリティホール
>["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
"","","","","","","","","","","","","","","","","","","","","","","",
]
233 :
229 :2011/10/20(木) 17:36:57.95
>>231 ありがとうございます。
試してみましたが、offline modeで止まる事はなくなりました。
ただクエリパラメータとして取得できない状態です。
str = cgi.params["str"]
でも
str = cgi["str"]
でもダメです。
234 :
uy :2011/10/20(木) 18:04:07.87
無理だなそれ 出来ない事はないはずだが、少しググったところ誰もやっていない それがやりたいなら普通に.cgiでクエリパラメータは受け取って、erbは出力専用にする erbは所詮evalらしいから、そのevalの中でCGI.newという動作を そもそも想定してないんじゃないか? ただ、自力で自分のURLからパラメータ解釈しようとすれば可能だろう erbはhtmlメタ出力をするものだと考えたほうが良いと思う
(1 2 3) (2 3 4) (3 4 5) ・・・ みたいなデータを正規表現でマッチさせて中身の数字だけを取り出そうとしているのですが pattern_mesh = Regexp.new("(?:(?:\\()(\\d+\\s\\d+\\s\\d+)(?:\\))\s*){n}","x") でうまくマッチさせることができません。nはカッコの数 しかし{n}を使わずに(?:(?:\\()(\\d+\\s\\d+\\s\\d+)(?:\\))\s*)を並べるとマッチしてくれるのですが {n}を使って繰り返す方法を教えて下さい。 お願いします
236 :
デフォルトの名無しさん :2011/10/20(木) 21:37:08.44
単純な /(.){3}/ =~ '0123456789' を試してみたけど、$1 は '2' になるんだな。
>>229 CGI 関係はばっさりカットして
str = query['str']
>>235 ()や空白を削除してからじゃあかんの?
HTTPServer.new(:port => 3000)でbindできないって怒られてる間に
素敵な回答がついてたでござる
>>229 もはや蛇足だけど.erb側のコード
<%= query %>
<%= meta_vars %>
<%= query['str'] %>
239 :
238 :2011/10/20(木) 22:43:10.91
もちろんエスケープしてね
>>235 ひょっとしてn じゃなくて#{n}だったとかいう話だろうか?
でもグルーピングを繰り返すと繰り返しマッチした最後の結果しか得られないぞ
ごちゃごちゃした文字列から ひとまず (1 2 3) (2 3 4) (3 4 5) ・・・を抜き出す
ってことならいいだろうけど
s = '(1 2 3) (2 3 4) (3 4 5)'
s.scan(/\((\d+)\s(\d+)\s(\d+)\)/) # => [["1", "2", "3"], ["2", "3", "4"], ["3", "4", "5"]]
241 :
デフォルトの名無しさん :2011/10/21(金) 13:37:03.52
do endと{ }は同じだと思っていたんですけど、 Enumerable#reduceに渡すときに、do - endだと `reduce': no block given (LocalJumpError) といったエラーが出て、{}だと実行できることがあります。 これってどういった違いなんでしょう?
243 :
229 :2011/10/21(金) 18:06:01.41
遅くなりましたが str = query['str'] で出来ました! ありがとうございます。エスケープもするようにします!
>>242 puts (0...n).reduce do|sum, i|
とか書いてたから、ブロックがputsの引数になってしまってたのかも
unkonow
よく 現在の接続してる人(見てる人)は何人って表示されますよね。 あれってどうやってつくるんですか?できればサンプルを載せてほしいです 環境はcentos+apache+railsでのサーバーです
Rubyは1ミリも関係ないな Railsも関係あるかどうか怪しい いろいろ方法はあるんだが、基本的には、数分に1度程度、全ページに組み込んだJavaScriptで通信をさせるのが簡易 ・通信がクライアントから送られているうちはそのページを読んでいるとみなす ・通信がクライアントから送られてこなくなったらそのページから移動した(または、ブラウザウィンドウを閉じた)とみなす こんな感じ 過去3分のうちにAというページから6回通信があったら、Aというページの現在の閲覧者数は6人ですと表示 過去5分のうちにサイトの全ページから送られてきた通信の総数をリモホでuniqした結果が13だったら、このサイトの現在の滞在者数は13人 あれはそもそもかなり適当で、厳密にカウントする方法というのはない
う
249 :
uy :2011/10/22(土) 14:04:58.81
>>247 >あれはそもそもかなり適当で、厳密にカウントする方法というのはない
ハァ???
お前がWeb技術の何を知ってんの?????
ページクローズ時に何かアクション起こさせればカウント出来るだろ
あとは数十分でタイムアウト
何でその程度でレスが出来るの?
CGIはサーバ側でHTML生成してクライアントで受け取りますが HTMLにRubyのコードを埋め込んでクライアント側で Rubyを実行してHTMLを生成するような技術ってないんですか。
>>250 そもそもクライアントでRubyを実行するには、クライアント側の環境にRubyがセットアップされていることが前提になってしまう
JSでRuby実装すればいいんだろ 簡単じゃん
Rubyの実装がまた1つ増えるのかw
JSで動くRuby環境をセットアップする必要があるのだが
>>254 きっと、1つのファイルにRuby実装と、それを使ったコードをまるごと書くんだよ
…重いだろうけどなw
256 :
デフォルトの名無しさん :2011/10/22(土) 15:42:34.65
257 :
デフォルトの名無しさん :2011/10/22(土) 15:43:27.26
おっと、インタプリタじゃない、コンパイラ(トランスレータ)だった。
258 :
uy :2011/10/22(土) 18:36:44.79
>>252 >>253 ハァ??????????????
とっくにあるっていう
IronRubyと一緒にリリースされてるだろうカスが ゴミカスが 情弱が
259 :
uy :2011/10/22(土) 18:41:26.24
>>255 はあああ???
Ruby実装だけ別ファイルにしてクライアントのキャッシュに入れとくに決まってんだろ
マ ジ で ア レ な の か ?
重いことにはかわりないけれど
1つのファイルにかかなきゃいけないって発想がどこからきたんだ?
JabaSkriputのかわりぬRubyつかおうってながれだってあるのに それすらしないのか??
260 :
uy :2011/10/22(土) 18:43:55.74
261 :
uy :2011/10/22(土) 18:48:16.60
>>254 なんでたかがDLさせる程度の作業に「セットアップ」なんていう
キリッ!!っとした単語使うの?
こういうなんでもないところで使われると、別のもっと使うべき箇所で混乱の元になるんだけど?
はあ??
>>257 お前もだよ
機械語を生成しない実装を、コンパイラとか呼ばれると情報探そうとしたときにすげー困るんだけど????
っはっぁ???
uyちゃんは珍回答した翌日よく壊れるな
uy=ruby - rb つまり、拡張子なしの偽装Rubyプログラムだ。 そう言えば、Rubyで作る人工無能ってあったな。
rubyでマクロを書いた場合どこに保存したらいいですか? homeのユーザーディレクトリの中ではなく、どのユーザーも共通して利用する場合の保存先を教えてください マクロは手動で動かすのと自動的に動くやつの2種類あります linuxです
265 :
264 :2011/10/23(日) 00:14:47.92
ついでにすみません 64bit OS(win.unix問わず)にrubyは対応してますか?
266 :
デフォルトの名無しさん :2011/10/23(日) 00:25:21.53
>>264 マクロって何を意味している?
定型処理を自動化したスクリプトってことならPATHのどこに置いてもいいけど。
/usr/local/bin とか。
>>265 うちのRubyはこんなのだよ。
ruby 2.0.0dev (2011-10-19 trunk 33483) [x86_64-darwin11.2.0]
まさかのエッジw
268 :
uy :2011/10/23(日) 21:41:22.44
>>262 俺は触ったことのないものでもある程度はレスが出来る
CGI.newは普通のオブジェクトnewとは少し違う可能性が高く
eval内で動作させるのは厳しいものと考えた
なので今回のはRuby側がerbの時にCGI.new以外で、クエリパラメータ情報を
どこかにちゃんと保持してるかが問題だった
ちゃんと作られているようで安心した
Ruby1.8でTimeからExcel等で使われているシリアル値を 得たいのですが簡単な方法があったら教えてください よろしくお願いします
>>268 あえて一言だけね
上のはWebrickのErbHandlerの問題
そのものはない あれはExcelの計算用の値だから、欲しいなら自分で計算するしかない 通常はそれに類するものを必要とすることはないはず 使用法が間違ってる可能性が大なので、そもそも何をしたいかを言うとなんとかなるかも
またタイムスパンの話になるに3000点 Excelでシリアル値意識するといったら時間間隔計算くらいしかねえ
>>269 こういう感じ?
class Time
def serial(float = false)
require 'date'
ret = DateTime.parse(to_s) - DateTime.new(1900, 1, 1) + 1
if float then ret.to_f else ret.to_i end
end
end
p Time.now.serial
274 :
uy :2011/10/24(月) 01:11:35.82
>>270 実装上の問題を指摘してんの?
ちゃんと作る気があるならできるとは思うが
面倒な事になるのが分かるから、別に妥協していいんじゃねと思ってる
cgiは.cgiでやれって感じだし
275 :
269 :2011/10/24(月) 06:02:26.13
レスありがとうございます
>>273 さんのを参考にして上手く行きました
Timeだと閏秒?で誤差が出るのかずれるんですね・・・
276 :
デフォルトの名無しさん :2011/10/24(月) 08:53:15.50
よくわからんけどロータス1-2-3バグ対応の件じゃなく?
277 :
デフォルトの名無しさん :2011/10/24(月) 14:33:23.22
UTC+7の時刻を表示する方法を伝授してください
278 :
デフォルトの名無しさん :2011/10/24(月) 15:57:30.39
ruby 1.9.2でsift-jisのファイルを buff = NKF::nkf("-Sw --number-input", File.open(FILENAME, "rb").read) のように読んで,buffを使っているのですが ArgumentError: invalid byte sequence in UTF-8 が出ることがあります. ファイルの中身をUTF-8として扱いたいだけで,不正な文字があるならその部分は消えてもいいのですが,どうするのがいいですか?
2つの配列を比較して追加・削除された要素を調べるコードを書いたんですが、 もっとスマートに書くことはできますか? ary1 = [1,2,3,4,5,6,7] ary2 = [1,2,4,5,8,9] del = [] add = [] ary1.each do |x| flag = 0 ary2.each do |y| flag = 1 if x == y end del << x if flag == 0 end ary2.each do |x| flag = 0 ary1.each do |y| flag = 1 if x == y end add << x if flag == 0 end puts "deleted:#{del}" #=> deleted:[3, 6, 7] puts "added:#{add}" #=> added:[8, 9]
ary1 - ary2 ary2 - ary1 があるよ
追記。[1,2,2,3] - [1,2,4] は [3] を返すので注意
PowerShell最強〜〜〜〜〜〜〜〜〜〜〜!!! > diff 1,2,3,4,5,6,7 1,2,4,5,8,9 InputObject SideIndicator ----------- ------------- 8 => 9 => 3 <= 6 <= 7 <= さっさとArray#diff(arr){|i,s| }実装しろやぁ〜〜〜〜〜〜
いいなあ。俺ももうRubyやめてPowerShellにするわ。
284 :
デフォルトの名無しさん :2011/10/24(月) 20:42:54.44
>>278 nkfの--number-inputオプションってなんだっけ。
"¥x82¥xA0¥xF8¥x9F¥x82¥xA2¥x82¥xA4¥x82¥xA6¥x82¥xA8".
encode('UTF-8', 'Shift_JIS', invalid: :replace, undef: :replace, replace: '')
=> "あいうえお"
285 :
デフォルトの名無しさん :2011/10/24(月) 21:28:13.76
みんなテストってどうしてるの? test unit? minitest? rspec?
286 :
277 :2011/10/24(月) 21:35:01.01
お願いします
287 :
デフォルトの名無しさん :2011/10/24(月) 21:47:02.04
>>277 標準のTimeはUTCと実行環境の地方時しか扱えない。
#utc_offsetでUTCとの秒差が出るので、時差分の秒数を増減して換算する。
タイムゾーン属性は変更できないので、あくまで意味的には元の地方時のまま
になるけど。
288 :
277 :2011/10/25(火) 00:18:28.13
ありがとうございます やってみます
289 :
デフォルトの名無しさん :2011/10/25(火) 09:17:27.64
>>284 みたいなのを戻すらしいです
これをしてないとファイルにHTML実体参照が混じっているときに
あとでHTMLをデコードするとshift-jisの文字コードが混ざって
invalid byte sequence in UTF-8
が出ていたので入れてます
今回はこれじゃなくて普通に変なコードが入っているようなので
ちょっとダサいですが
s = NKF::nkf("-Sw --numchar-input", s)
s.encode("UTF-16BE", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8")
としてよくなりました
290 :
デフォルトの名無しさん :2011/10/25(火) 09:18:56.04
マニュアルにPHP並みのサンプルコードを書いて欲しいって言いたいんですがどこに要望だすといいのですか?
本を売りたいのでマニュアルが充実することは今後もありません。
本でもいいです逆引きサンプルが充実している本を出してください
マニュアル、前の方がよかったなあ。 見やすさという点では、ずっとよかった。 今のマニュアルだと、もはやメソッドを探せないよ。 メソッド名は元から知ってて、細かい挙動を知りたい人向けだと思う。
クラス階層が一覧で見れなくなったのが痛い。例外クラスとか特に。 アルファベット順に並べられても全く嬉しくない。
外部プログラムから探すのに最適化された結果をHTMLにして出力してるだけだからねえ クラス使用初心者向けの情報はゼロだ ただ、幸か不幸かあれを使いやすいものだと思ってる人はいない たとえ使いやすいものであっても内容がまったく更新されず 「ふた昔前の今は動かないようなバージョンに機能追加 (new feature!!)」 とか平気で書いたままになってる手動記述マニュアルよりはマシだ ということで、ああいうふうになってる 最小の手間でなるべく最新の内容に保ち続ける算段があるのなら言ってもらえれば嬉しがる人が増えるかと思う
全く知らないんだが、 あのマニュアルってどっかのデータから生成してるの?
298 :
デフォルトの名無しさん :2011/10/25(火) 20:13:33.30
いわゆるるりまは手作業(専用MLあり) ruby-doc.org はソースのコメントから生成じゃねーの?
お願いしますPHPのマニュアルぐらい分りやすいマニュアルを作ってください アフィリエイトとか踏みますのでお願いします
300 :
デフォルトの名無しさん :2011/10/25(火) 23:18:07.59
RailsのPlug-in開発中に出会った問題ですが聞いてください Objext.extendで標準ライブラリを拡張するために、以下の様にコードを書きました module MyPlugin::RubyExtensions::OpenStruct def to_hash # 宣言した 値を取得 keys=(self.methods - OpenStruct.new.methods) # 以下ロジック... end end st = OpenStruct.new({ foo: 1, bar: 2 }).extend(MyPlugin::RubyExtensions::OpenStruct).to_hash to_hashメソッドの中で呼んでいるOpenStructが、モジュール名と衝突して使えない状態になりました それならC++みたいに次の様に記述すれば、モジュール名と衝突しないだろうと書いてみたのですが ::OpenStruct.new これでもダメでした 現在はモジュール名を変えてしまって回避していますが「::モジュール名」で globalなクラス名が呼べていないのはなんだか気持ち悪いのですが… こういう挙動になっている理由&globalなモジュールの呼び出し方ご存知でしたら 何方か教えてください 環境は ruby1.9.2、CentOSでrvmでインストールです
>>300 モジュールやクラスを定義する時に
module MyPlugin::RubyExtensions::OpenStruct
でなくて
module MyPlugin
module RubyExtensions
module OpenStruct
のやうに記述する
302 :
uy :2011/10/26(水) 02:44:42.04
>>294-296 マジで同意
つうか目次がゴミッカスなだけで、検索結果の表示部分はギリギリ許せる
けどせめてサンプルのソースコードくらい背景色と文字色は変えたほうがいい
Ruby関連の情報は、白・黒・青しか使ってないものがたまにあるけど、色のチョイスがおかしいよ。それ。
あとは目次をさっさと、アルファベット順じゃなくて
機能別順にツリーで並べて一行で縦長にしとけと
アルファベット順で調べたいと思うことなんて早々ねえんだよks
てか何故青基調なんだろ それじゃサファイアじゃん
隔離スレ池
るりまになってから、特殊変数の定義が module Kernel のページに入ってるんだけど、 あれは何で? Kernel の中で定義されている?
>>307 以前、どこにいったのかと探したなそういえば
そんなとこにあったのか…道理で見つからんワケだ
おお、やはりほかにも迷った方がいましたか。 「変数と定数」の「組み込み変数」のところに Kernel へのリンクがあるので 一応辿れないことはないんですが、わかりにくいですよね。 というか、「これらを組み込み変数と呼びます」と書いたそばから、 「詳細は Kernel の特殊変数を参照してください」と書いてあって、 「組み込み変数」なのか「特殊変数」なのかどっちやねん、って感じです。
そんな怖いサービスはない 具体的に何をしたいのか言え $SAFEがもうちょっとマシならもしかしたら何年かあとにはあるかもしれないが、 どちらにしてもできることは極めて限られるだろう
何年かあとにそもそも$SAFEが残っているか微妙な希ガス
何年もかけて$SAFEがこれだという表現のほうが適切かと思う こういうのはふつうは「企画倒れ」とかなんとか呼ぶ
jail とかで頑張らないといけないから大変なんだよな
Sinatraのbeforeフィルタ内でrequest.path_infoを書き換えると ルーティングを変更出来るのですが、Padrinoでは変化しませんでした。 Padrinoのbeforeフィルタ内でルーティングを変更する方法があれば教えてください。 /hoge/へのアクセスは get '/' 、/book/hoge/ は get '/book/' といった感じに割り当てたいです。 Sinatraでは before do @hoge = true if request.path_info =~ %r[/hoge/] request.path_info.sub!("hoge/", '') end get '/' { @hoge ? "hoge" : "fuga" } としていました。
318 :
デフォルトの名無しさん :2011/10/26(水) 20:46:42.64
定番は英語公式からもリンクされてる tryruby.org じゃねーの? まぁ、irbになっちゃうけど。
いえ、ただブラウザで実行したいだけです 本当のRubyをブラウザで実行するわけではありません googleのplaygroundみたいにブラウザでコード張って実行したら結果が出るのがいいのです javascriptでそういうのを実装したものが合ったんですがブックマークをけしてしま
tryrubyはなんか出力がおかしいね
> 5.times { puts "hello" }
=> "hellohellohellohellohello"
>>319 上であがってるリンクではどこが不足なのかを説明したほうがいいよ
>>319 もしかして、クライアントサイドでRubyScript動かしたいってこと?
それとも、サーバ上でコンソール向けスクリプト実行して
結果を返して欲しいの?
じゃあその3番目を使えばいいと思うんだけど、 もしかして自分が借りてるサーバなどで動かしたいということ?
アフィリエイト狙いだろ。全部言わせんな恥ずかしい
326 :
uy :2011/10/27(木) 01:52:46.71
質問者とブラウザーのことはさておいといて お前ら理解力なさすぎ 俺なんて1レスでわかったわ 質問者がブラウザーを理解してないってことが。 あのな質問者 お前の言ってることは、ブラウザーのウェブアプリケーションデザインの問題 ブラウザーにコードかいて実行押したときに、別ページにとんでブラウザーに実行結果が出るのと 同じページに実行結果が出るのは、ブラウザーに表示されたHTMLの外観の作り方の問題なだけであって、中身(ブラウザーの外)は同じ こいつらはブラウザーのオフライン環境では動かない。サーバーと通信してる サーバー側にあるruby.exeが実行されてその結果が出るだけ(ブラウザーではない) セキュリティ何も考えなくていいなら、君でも作れるよ こいつらは例外なくブラウザーではなくCGIで動いてる。ブラウザーのJavaScriptで動かすと、たとえば無限ループのプログラムをRunさせちゃったときに ブラウザごとフリーズするからな。サーバー側では基本、N秒以上経ってもプログラムが終わっていなければそのプロセスをkillするようになってる(ブラウザーとはちがう) つまり、何が言いたいかというと、codepadで我慢しろ
>サーバに投稿するものではなくオンラインで実行できるだけ
「オンラインで」は「サーバーと通信して」と理解するのがたぶん適切だと思うんだけど、
質問者は単に「ブラウザ上で」という意味で使ってる?
だとしたら
>>321 の「クライアントサイドでRubyScript動かしたい」が正解だよな。
ちなみに
>>310 や
>>311 の三番目もサーバーにスクリプトを送信して実行結果を受け取って表示してる。
JavaScriptで実装したRubyは適当にググっただけでもいくつか見つかるけど
どれも数年前に開発が止まってた。
jslinuxでruby 1.8を動かした人もいたと思う。
lleval(
>>311 の三番目)はサーバーと通信するタイプだがAPIも公開してる。
いやだからその実行するものはRubyでなくてもいいんですよ もういいです
> いやだからその実行するものはRubyでなくてもいいんですよ 一番重要な情報を最後に出すなボケカス。 それを改めない限り二度とネット掲示板で質問するな。言語の種類関係なく。
>330 別に一番重要な情報じゃないだろw
332 :
uy :2011/10/27(木) 12:34:34.44
ブラウザーのことなんもしらないんだな
そういうサービスを知ってるものとしては分るけど
>>327 とか
>>330 のような使ったことない人には何言ってるかわからないんだろう
俺はブラウザーのことならなにからなにまで知ってるぜ。
概念があいまいだからか、 言葉もあいまいで不正確だから誤解を招く
>>334 >なにからなにまで知ってるぜ。
"なに" - "なに" = ゼロ
この場合、 なに・・・x1 なに・・・x2 と考える方が妥当では
それだとマイナスも有り得る。
NaN..NaN # => ArgumentError: bad value for range
ちょっと面白かった
TCPから勉強した方がいいと思うよ
342 :
uy :2011/10/27(木) 23:46:05.22
>>334 ActivXってそれをインストールすると
ページにアクセスした時点でクライアント側のexeを実行させたりする事も可能になってるようなんですけど(ハンゲームとか)
これは、仮に正規のページ以外から任意のexe実行させたりされる可能性があると思うんですけどどうなの?
そこら辺ってURLか、何らかのパスワード的なものでチェックかけてんだと思うけど、偽装される可能性は?
cmd起動出来るならなんでもやられちゃうと思うんだけど?
343 :
300 :2011/10/29(土) 09:55:01.08
>> 301 報告遅れてすいません うまく動きました!
このスレって著名なブロガーとか技術者とかRubyの開発者も見てるよね たまにしょぼい回答者もちらほらみかけるが全体的に回答者(ほとんど数名の方が回答しまくってるのかもしれないが)の質が高いよここ
ひとりかふたりレベルの違う人がいるね ちょっとググったぐらいじゃ答えられない質問になると答えてる いつもほんの数行だし記名性のない文章だから気付きにくいけど
いやあそれほどでもって言っておけばいいのかな
うむ、毎回長い俺は違うな
スレで煽られてヘソ曲げちゃった人とかいるしな
ろくに理解も出来ないのに無理に回答するやつはうざい
windowsのコマンドラインから実行したとき、ctrl+zが押されたときに特定の処理をやりたいのですが 押されたか知る方法はございませんか?
351 :
uy :2011/10/30(日) 01:54:57.76
>>344 開発者気取りの成りすましレスなら見たことある
2chにしてはマシってだけで、まだ全然低いだろ 贅沢? 俺は贅沢だ
確かに少しググった程度じゃ「今は」見つからない情報っていうのはあるけど、
それは1年前や3年前のGoogleだったら検索に引っかかりやすかった可能性はあるのでなんとも
あとは英語版Googleとか Google SorceCodeSearchだな
あと、スレ盛り上げる為か何か知らないけど
自分で質問して自分で回答してる奴がいるのもわかってるからね?
あえてスルーしてあげてるだけだからね?
uyのネット匿名カテゴリにおけるinsightをあまりなめてはいけない
ございますん
>>350 通常Ctrl+Z(とEnter)を押してもRubyに渡る前に
コマンドプロンプトがCtrl+Zを処理してしまうからRubyにまでは届かない
ただファイル末端に到達したことを検知するだけなら
begin
loop { puts readline }
rescue EOFError => e
$stderr.puts "stream reached EOF"
end
処理を途中で終了したいとかならCtrl+ZでなくCtrl+Cにして
>>165 のようにする
これで足りなきゃCtrl+Zを検知したい理由や押すときの状況なんかを詳しく書くといいかも
#状況がわからんけど、例えばこんなのではどうか? require 'Win32API' def getch _getch = Win32API.new('msvcrt','_getch','V','I') kc = _getch.call if kc == 0 or kc == 0xE0 kc = _getch.call | 0x100 end kc end def kbhit? !Win32API.new('msvcrt','_kbhit','V','I').call.zero? end def sleep_or_keywait(t, keycode=nil) start = Time.now.to_f while Time.now.to_f - start < t if kbhit? kc = getch return kc if !keycode or kc == keycode end sleep 0.01 end nil end 100.times do |i| puts i break if sleep_or_keywait(0.5, 26) end
def fact(n) n == 1 ? n : n * fact(n - 1) end p fact(8188) rubyってどこまでデカイ数扱えるのかなと思って試してみた 8188までいけた、これよりデカイ数を求めたくなった場合はどうしたらいいの?
BigBigNum でも自分で作れば?
>>355 再帰だとスタック食い潰しちゃうから再帰を使わずに書く
確かに試してみると SystemStackError: stack level too deep で落ちてるな デカイ数を試すテストになってねぇじゃねぇかw
再起なんて使うな!計算機の都合を考えろ! ひどい言い草だな。Steve Jobsの前で行ったらその場でクビになるレヴェル。
は? クビになるのはてめぇだぞ。それを実行するユーザーに無限のメモリ増設を 要求するプログラムを作った、という罪で。
真面目な話1.9でコンパイル済みのRubyのスタックサイズを増やす方法はあるのかな 1.8ならuname -s (Linux/bash) でいけるらしいけど
PHPのcurl関数に相当する機能はRubyでは標準で用意されてないのですか? のこぎりとか使わないとだめですか?
curl 関数ってなんじゃらほ
PHP は ibcurl サポートがデフォルトで組み込まれてたりなんかするんか
>PHP を cURL サポート機能付きでコンパイルすると、 curl 関数を使用可能となります。
うへぇマジだ
>>362 HTTP の送信メソッドを操作する基礎的なライブラリ Net::HTTP と、GET だけするライブラリ open-URI はあるが、
Web ブラウザやダウンローダとしてヘッダやデータを扱う複雑なライブラリは標準では存在しない
gem では Mechanize が、libcurl を呼ぶ gem としては curb なんかがある
ありがとうございます 日本語情報が多いMechanize使って見たいと思います ちょっとずつPHPのコードをRubyに移植しながら勉強していきたいと思います
PHPは最初からWeb用にできてる言語でしょ? Rubyが標準で持ってない機能なんてたくさんありそうだな
>>361 > コンパイル済みのRubyのスタックサイズを増やす
MS-DOS の EXE ファイルじゃあるまいしw
ていうかunameじゃなくてulimitかな? それはプロセスの属性であって、
実行可能バイナリの属性じゃない。
>>365 Rubyの「標準添付ライブラリ」に相当するものが、なんでもかんでも組み込みで
グローバル名前空間に存在してることを自慢する人たちだから、競争したらダメw
>>361 /* each thread has this size stack : 128KB */
#define RUBY_VM_THREAD_STACK_SIZE (128 * 1024)
などとハードコーディングされてるっぽいよ
>>366 Rubyも組み込みライブラリが結構デカいと思うから
そこは別に言われても気にしないな
問題はライブラリじゃなくて言語本体の微妙な感じ
>>366 > ていうかunameじゃなくてulimitかな?
どもども。単純にボケた
>>367 ソース眺めた感じではあとから変更はできなそうだね
(自分が読み間違えしてなければ)
どうもありがとう
injectで書くのとwhileループまわすのとどっちが速いんだ? 自分で試すの面倒だから誰か試して
>>371 単純に数値の配列の合計求めるとこうなった
require 'benchmark'
Benchmark.bm(10) do |x|
list = (1 ... 1000000).to_a
x.report("while_test:") {
len = list.length
sum = 0
i = 0
while i < len
sum += list[i]
i += 1
end
puts sum
}
x.report("inject_test:") {
puts list.inject(0, &:+)
}
end
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]
user system total real
while_test:499999500000
0.625000 0.000000 0.625000 ( 0.625000)
inject_test:499999500000
0.719000 0.000000 0.719000 ( 0.718750)
>>373 それはないです
少なくとも一般に知られている妥当動作のものはない
あるべきだと思うんだけども
>>371 単純なものならwhileのほうが絶対的に速い
ただし、実際に処理をループ内にいろいろ詰め込んだ場合は不定
というか、whileやeachで平易に書けるならinject使う理由がねえ
松本さんの知り合いだったら俺がメモリ関係の件を実装しろっていいたい
あのRubyのマニュアルを作りたいのですけど マニュアルを作るさいのライセンスは何を使えば良いのですか?
ソースコードを引用することもあるんで、一般論としては本体に揃えるのが無難ではある まったく別の権利体系にすることももちろん可能だが(電子書籍で売ったっていい)、 こんなとこでこんなこと聞いてる時点でそのへんは不可能だろう
まじで、是非是非いいマニュアルを作って欲しい
>>379 無理無理
今本当に必要なのはマニュアル内容よりもマニュアル分類だもの
全ての添付ライブラリの分野に精通してるなんて現実的ではないし(Cのソケット通信やSSLのコードを理解できますか?)、
既存のマニュアルを分類し直すのが一番安心確実高利回り
それに手をつけないってことは、つまり、モヤモヤ妄想しているだけで、本当は何も考えてないってことだ
分類は必要ないかな 別に今のマニュアルでも不便はない
本当に欲しいのは初心者ガイドや初心者用逆引きシステムであって、別のマニュアルではないよね
るりまサーチで十分 初心者は1冊本を買えばいい
レシピブック初版から買い替えたいけど時期的に中途半端すぎて買えねえお
とりあえずchmが以前のやつに近くなればいい
>>386 それは思う
緊急的にどうにかなんないもんかしら
すげー読みやすくなってんじゃん まったく変化に弱い連中だなw
>>357 >>358 なるほどスタック領域とやらを食いつぶして死んでただけなのか勉強になるなあ
でもこれ以外のメモリの使い方がよく分からん
例えば配列をドカッと確保したらそれはスタックではないから大容量使えるって事なのか?
スタックはスタックだ …説明めんどくさいな、いわゆる一般的に言われるメモリ領域とは違…うん、まあ、違う 瞬間的な処理予約数っていうのがシステムの制限由来で決まってて、再帰は再帰ループが終わるまでその予約数を1つずつ使用する 再帰のようなものや無限ループでなければ、スタックを食い潰すようなことはない もちろんシステムのメモリの制限があるが、その制限しかないとも言える 配列の要素数や文字列の長さは、システムのメモリの制限しか受けない
>>374 GC.malloc_allocated_size
GC.malloc_allocations
ってのがソースには存在するけど
デフォルトでは無効化されてる
有効にして再コンパイルすると使えるのかな?
でも有効にすると性能低下があるのかもしれない
どういう機能なのかはわからんけど
Rubyはインストールできたけど、Railsが入らない。
requireについて質問です。 require "foo" と require 'foo' のように、○○の部分を''で囲むのと""で囲むのとの違いは何でしょうか。 入門書では""で囲っているのですが、web上には''で囲っているサンプルコードもあり、よくわからなくなりました。 どちらで囲うのが正しいのでしょうか、或いは場合によって使い分けるのでしょうか。
途中で書きなおした結果、一部文章が変に・・・orz
>>393 の
>のように、○○の部分を''で囲むのと""で囲むのとの違いは何でしょうか。
という行の「○○」の部分はfooと書くつもりでした。
396 :
uy :2011/10/31(月) 03:50:53.22
使い分けなくても良い 個人的にはreuireだけ''で他は大体""でやっている ひとつだけ言えば、全部''でやったら死ねって思うけど 全部""だったら別に有り 基本""でやって''でやったほうが良い箇所を見つけたら''使えば良いレベル
グロ中尉
>>395 ,
>>396 ありがとうございます。
>>395 式展開が使えるので""で囲んだほうが柔軟、という表現が正しいのかはわかりませんが
そんな感じなんだなという風に理解しました。
>>396 思いは書かれているのですが理由がなく・・・すいません、よくわかりません。
require :foo サポートしたら絶対流行る
>>399 …そう読めるなあ
式展開 #{うめこみ} を使用しないなら、使用しないという意図がわかるように、誤爆が起こり得ないように 'シングルクォート' で囲む
というのが一般的
「式展開しないならダブルクォート使ってんじゃねーよ!」「うっせーアスペ!」とかいうケンカが稀にある程度
実際にはまあどうでもいいので(Rubyの式展開自体、どんなエディタでも目立って存在がわかる)、好きにするといい
なんでもダブルクォートで囲むのはPerlの人かなとも思う
>>401 ありがとうございます、''には誤爆防止という事もあるんですね
Perlでダブルクォートが多用されるのは、ダブルクォートのほうが文字列として認識しやすいのと、 シングルクォートだとバッククォートと見分けがつきにくいという理由から。 Perlを踏襲してるRubyでも同じことが言えるかもしれないけど。
原則ダブルクォートで、特に展開しないという意図を示す時には シングルっていうルールでやってるが、 まあよく考えたら逆でも問題ない気がする
Perlだと'++' "\+\+"
406 :
uy :2011/10/31(月) 17:51:25.58
ダブルクオートでかいて 誤爆したことあんの? っていう
俺はシングルが基本だな Windows環境で使うと自然とシングルになると思うw
シングルでもバックスラッシュ書くのは面倒 エスケープの無い文字列リテラル希望
>>408 rubyはじめたころは:hogehogeで文字列リテラル書けるかーと勘違いしていた
このスレの先輩方からみてphp言語に足りないものを教えてください
知性
クラス定義のエクスポートみたいなことできるでしょうか? 中身が(私の頭では)理解できないライブラリ hoge.rb がありまして スクリプト中で require 'hoge' Hoge.operation としてメソッド実行すると、動的にクラスFugaが定義されます。 このFugaクラスのインスタンスを生成した後で Marshal.dump の 結果を外部ファイルに保存し、後で別のスクリプトからそれを Marshal.load して使うということを考えていたのですが ... undefined class/module ... ということで、どうもFugaクラスの定義がないとダメなようでして。
>>412 その別のスクリプトで
require 'hoge'
Hoge.operation
をやればいいだけだと思うんだけど、それが出来ない理由が有るの?
>>412 その別のスクリプトには、Fugaの定義が書かれていないんだから、
定義がないよと言われるのは当然の事なのです。
>>413 のように別スクリプトで改めて、require 'hoge'して
Fugaの定義を読み込むのが解決策です。
415 :
412 :2011/11/01(火) 09:25:09.89
Hoge#operation がけっこう重たい処理を含んでいまして、クラス定義だけ抜き出したいところなのですがソース眺めてもチンプンカンプンというしだいです。 具体的には gem databasedotcom の Databasedotcom::Client#query なんですが。
>>412 インスタンスを復元したいだけなら undefined class/module が出たクラスを
class Fuga ; end
class Hoge ; end
class Hage ; end
class Page ; end
みたいに空の定義を書けば復元できる(かもしれない)
ただし復元出来ても元で定義されてたメソッドとかは当然使えない
観念してソース読んだ方がいいよ
質問です。再帰処理を行いたいのですが、 メソッドを定義せずにワンライナー的に処理を行う方法はありますか?
ラムダ式の引数にラムダ式を与えるってのはだめか? ださいけど
そりゃYコンビネータで出来るけど、ここ初心者スレだし、 ブロックとメソッドの違いとか面倒だし、おすすめできない。
ここで欲しいものは「なんかあてはめだけで1行で書ける再帰記述法」だろう そういうようなものは、残念ながらない 複雑でめんどい概念のもので再現可能だとしても、それはきっと要件を満たさないはず
本当にやりたかったのは再帰処理じゃなくってruby -nだったりとか
ふつうにラムダ自身を代入したローカル変数をラムダ内で呼んで再帰させればいいんじゃ fib = lambda{|n| (n==0 || n == 1) ? 1 : fib.call(n-1) + fib.call(n-2)} fib.call(10) # => 89 ローカル変数も禁止だとすると 今のRubyには存在しない__callee__みたいな感じでラムダ自身を返すものでもないと無理だろうけど あらかじめこんなメソッドを作っておいてもいいのなら 定義と実行はワンライナーで書ける def foo(*a) innerblock = proc{|*b| yield innerblock,*b} yield innerblock,*a end foo(10){|f,n| (n==0 || n == 1) ? 1 : f.call(n-1) + f.call(n-2)} # => 89
426 :
デフォルトの名無しさん :2011/11/01(火) 22:05:32.02
とりあえずYコンビネータ置いときますね。 ->(f){->(g){f[->(x){ g[g][x]}]}[->(h){ f[->(y){h[h][y]}]}]}[ ->(f){->(n){ n==0 ? 1 : n*f[n-1] } } ][10]
427 :
412 :2011/11/01(火) 22:22:39.90
どうもありがとうございます > 413,414,416,417 ソースを眺めたところ Class.new + α して動的にクラス定義するメソッドがあったので、 これを使って必要なクラスを用意してから Marshal.load したらできました。
>>374 1.9.3がでたのでコンパイルするついでに
CALC_EXACT_MALLOC_SIZEを有効にしたのもコンパイルしてみた
GC.malloc_allocated_sizeで
Rubyが確保したメモリサイズがわかるのかな
でっかい文字列とかを作るとその分増えて
そいつの参照を切ってGC.startすると
文字列がゴミ回収されて
GC.malloc_allocated_sizeが減る
呼び出し方がいけてないけど、こんなAlambdaみたいなのを定義しとくと 書ける気がする。。ちょっと無理があるか。 class Alambda def initialize(b); @proc = b; end class << self def alambda(&b) obj = Alambda.new(b) lambda{|*args| obj.instance_exec(*args, &b)} end end def method_missing(action, *args) instance_exec(*args, &@proc) if action == :this end end fact = Alambda.alambda do |i| i == 0 ? 1 : i * this(i - 1) end puts fact[5] #=> 120
430 :
429 :2011/11/01(火) 23:03:57.36
これでも同じか。 class Alambda def initialize(&b); @proc = b; end def [](*args) instance_exec(*args, &@proc) end def method_missing(action, *args) instance_exec(*args, &@proc) if action == :this end end fact = Alambda.new do |i| i == 0 ? 1 : i * this(i - 1) end puts fact[5] #=> 120
lambda{|f,v| f[f,v]}[lambda{|f,v| (v<=1) ? 1 : f[f,v-1] + f[f,v-2]}, 10] 引数が増えるのが難点だけど
432 :
デフォルトの名無しさん :2011/11/02(水) 07:25:44.67
すみません。 ruby1.9系の勉強をしたいと思っていますが、ネットでお勧めのページはありますか? 基本的な文法からMix-in、例外処理、ネットワーク処理、ファイル入出力など細かいところまで一通り解説があると助かります。 よろしくお願いいたします。
>>432 9割くらいは1.8系列と一緒なので、適当な1.8解説サイト読め
ネットじゃなく本を読め
笑わせんなジジイ
レスどうもです
>>433-434 実は、プログラミングRuby第二版を持っているんですよね
1.8系列について書かれた本ですが、読んで損はないですかね
それとも、ケチらずに1.9系の本買った方がいいかな?
>>436 持ってるならそれ使って1.8で勉強して
その後変更点や新機能をググればいいかも
ふざけんなガキ
439 :
uy :2011/11/03(木) 09:52:22.94
再帰lambdaなら 以前俺が簡単な実装かいたじゃん Rubyの機能として無いんだからやたら複雑な事をやんないで 今はこれで良いと思う def sss *h @@sss_vvv = lambda do |*h| yield *h end if iterator? @@sss_vvv.call *h end n=sss 4 do | n | if n == 0 1 else n * sss(n - 1) end end p n sss 9 do | n | sss(n - 1) if n > 0 sss 9,n do | n , m | sss(n - 1 , m) if n > 0 printf "%3d" , n*m end puts end 2重再帰も可能
ワンライナー的な、という話は読まないのね相変わらず
441 :
片山博文MZ :2011/11/03(木) 21:30:15.71
俺sugeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!
CentOS5.7でruby-1.8.7をmakeしたところ eval.c: In function ‘rb_eval_string_wrap’: eval.c:1744: 警告: assignment discards qualifiers from pointer target type のようなwarningが出たんですが問題ないのでしょうか・・・
テストが通ればいいだろ
警告だけでコンパイルが終了したなら大丈夫 稀にコンパイルできない人がいるんだが
いまんとこまだウォーニングゼロは方針にはなってなかったはず
446 :
uy :2011/11/04(金) 11:14:51.51
>>440 そもそも機能がねーって言ってんの
代案があるならソースコード載せろ
>>440 ワンライナー的に使うなら430にto_procも入れればいいんですかね。
ブロックで書いてる感があるかも。
class Alambda
def initialize(&b); @proc = b; end
def [](*args); instance_exec(*args, &@proc) end
def to_proc; Proc.new{|*args| instance_exec(*args, &@proc)} end
def method_missing(action, *args); instance_exec(*args, &@proc) if action == :this end
end
p [1, 2, 3, 4, 5].map &Alambda.new{|i|
if i == 0
1
else
i * this(i - 1)
end
}
#=>[1, 2, 6, 24, 120]
448 :
片山博文MZ :2011/11/04(金) 18:15:43.40
俺sugeeeeeeeeeeeeeeeeeeeeeeeeeeee!
449 :
デフォルトの名無しさん :2011/11/04(金) 19:14:48.53
gem install jsonでエラーが発生します。 まる一日ググってもわかりませんでした。 どうやったらインストールできるか教えてください。 環境:windows7 64bit、ruby 1.9.3p0、gem 1.8.11 以下エラーメッセージ----------------------------------------------------------- Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... ERROR: Error installing json: ERROR: Failed to build gem native extension. C:/Ruby193/bin/ruby.exe extconf.rb checking for re.h... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=C:/Ruby193/bin/ruby C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to genera te an executable file. (RuntimeError) You have to install development tools first.
書いてあるそのまんまだと思うのだが っていうかなんでわざわざ初心者がRubyInstaller使うかね
gemで入れなくても最初から入ってるじゃんjson
Ruby1.9.2用のRailsのインストールの手順とかそのままなぞってるんだと思うにゃん 本当に丸一日ぐぐって解法に辿りつけなかったんだったらプログラミングやめたほうがいいかもと親切心で思う RubyInstaller(MInGW)でインストールしたなら、DevKitが要る おそらく、どっかの誰かがうっかり間違ってパッケージングしてるってだけで、 DevKitが要らない解決法もあるのだと思うのだが、 こんなことが起こるたびにどっかの誰かの修正リアクションを待ってなんていられないので、 自前でDevKitをインストールしてコンパイル可能にしておいてしまうのが簡便な解決法 DevKitはRubyInstallerのサイトからダウンロードできる
メッセージ見るとdevkitは入ってるでしょ Makefile作る時点でコケてる
ruby/re.h をコピーするの? どっちにしても Ruby 1.9.2 ならあっさり成功するよかん
455 :
449 :2011/11/04(金) 20:40:02.05
みなさん回答ありがとうございます。
>>450 One-Click Installerは1.9対応していないみたいなので。
>>451 説明不足でした。
jsonを入れたいわけではなくrailsをインストールするときjsonで落ちていて困っているのです。
>>452 DevKitはインストール済みです。
>>453 Makefile作る時にこけるとすればどのような解決策があるかご存知ですか?
rubyinstaller再インストールしてみたら
・rubyはwindowsに対応していません。
Ruby 1.9.3 が新し過ぎてなんかどっかが対応してないのだろ
xp32bitでは普通にできたぞ
460 :
449 :2011/11/04(金) 21:01:13.94
>>456 458
1.9.2の再インストールで解決しました。
ありがとうございました!
何かディレクトリいじったんだろうね
462 :
デフォルトの名無しさん :2011/11/04(金) 22:14:20.79
json_pure を require している gem は特にこだわりがないのなら json に 切り替えて欲しいな。
いきなりコロンコロンから始まるクラス名ってどういう意味があるのでしょうか エロイ人教えてください
>>463 いわゆるトップレベル。
class Foo
end
module Bar
class Foo
end
p Foo # => Bar::Foo
p ::Foo # => Foo
end
>>464 よくわかりました。
ありがとうございます
1.9.2からrequire_relativeというのが導入されたみたいだけど、これってrequireとどう違うの? ぐぐってもわかりやすい説明がでてこないし。 $: に「.」が含まれなくなったことと関係しているらしいことまではわかったけど、 「.」が含まれなくなったことと、require_relativeがどう関係しているのかわからん。
同じディレクトリにhoge.rbがあったとして、 require_relative 'hoge' と $:.push "." require 'hoge' が同じこと、って意味じゃない。
ものすごく平たく言うと、引数を丸ごと expand_path して存在を確認してから expand 済みのパスを require してる 結果として、require_relative 'hoge' は require File.expand_path('hoge') にかなり等しい require_relative は $LOAD_PATH を読まず、カレントディレクトリ(からファイルパス計算した位置)に hoge.rb/.so がなければ LoadError require_relative 'uri' はカレントディレクトリに uri.rb がないと動かない 1.9.2 以降の require 'uri' は Ruby ロードパスに uri.rb がないと動かない 1.9.1 以前の require 'uri' はカレントディレクトリに uri.rb があればそれを読み、それが無いときにのみ Ruby ロードパスを探す (そもそも $LOAD_PATH 自体にカレントディレクトリが含まれていたので、この説明は正確ではない)
uniq!って配列の中が一つしかないとnilになるとか知らなかったわ
今リファレンス読んだら変更がないときはnilなんだね スレ汚しすまそ
破壊型メソッドは成功時にselfを 失敗or何もしなかった時にnilを返すようになってるね 詳しく知らんけどSmalltalkのカスケード式みたいなのがあればと、たまに思う または、 (tmp = foo.hoge1) && (tmp = tmp.hoge2) && (tmp = tmp.hoge3) みたいなやつ 失敗しない限りメソッドチェーンを続けるようなもの foo ||= bar は foo || foo = bar からの類推で foo &&. bar を foo && foo.bar にするみたいなのがほしい 実際は (tmp = foo) && (tmp.bar)と同等で
>>471 有名どころではactive_supportのtryを使えば良いかな
require 'active_support/core_ext'
foo.try(:bar)
473 :
デフォルトの名無しさん :2011/11/05(土) 19:23:41.62
tryは、途中でnilになると式全体がnilになるので、 失敗する寸前のオブジェクトが欲しいときは他の手段が必要だな。 CoffeeScriptの ?. はどんなのだったかな…
「*は直前の正規表現の0回以上の繰り返しとマッチします。」で以下の二つがマッチする理由がわからないのです /a*c/ =~ "abc" #=> マッチする /a*c/ =~ "abcccccc" #=> マッチする 上はマッチする文字列はcの直前の文字がaである必要があるが、bが含まれる 下は繰り返される文字は*の直前のaである必要があるが、cが繰り返されている それでもマッチするのはどうしてなんでしょうか? 初歩的な質問ですみません。
aが0回でもいいんだから、cの直前の文字がaである必要はない
なるほど! とてもわかりやすいレスありがとうございます!
>>474 *は欲張りマッチなのでa*cとするとabcccccccと来て、ここで最後のcがマッチして検索終了となる。
*?で非欲張りマッチにするか、cにマッチしたくなかったら肯定先読みとか使う
>>474 /a*c/という正規表現リテラルは
"abc"というマッチ対象文字列の"c"にマッチし
"abcccccc"というマッチ対象文字列の"abc"にマッチするということ
479 :
474 :2011/11/05(土) 21:45:06.89
じゃないよまったく "abcccccc"というマッチ対象文字列の"c"にマッチする、の誤り
おちけつ
>>467 $:.unshift "."
ではなくて
$:push "."
なの?
>>468 そこでいう「カレントディレクトリ」って、プロセスの?
それとも「require 'hoge'」が書かれてあるファイルが置かれているディレクトリのこと?
前者なら、require_relative 'hoge' した場合、プロセスのカレントディレクトリが変わると、読み込まれる hoge.rb の位置も変わる。
後者なら、プロセスのカレントディレクトリの位置によらず、読み込まれるhoge.rbの位置は一定。
どっちでしょう?
def foo enter{ fooに入った直後に実行 } exit{ fooから抜ける直前に実行 } メインのコード end みたいに書く技って無いですか
>>482 def foo_setup; end
def foo_main; end
def foo_teardown; end
def foo
foo_setup
foo_main
foo_teardown
end
main で例外が起きても実行したい処理があるなら適当に例外キャッチとかしろ
多勢に問題はないが、微妙に残念なコードだな いちおう ensure があるにはあるんだけど
漢字をローマ字に変換したいのですがkakasiを使う以外にライブラリはありませんか?
kakasiがあるから誰も作らない状態 膨大なデータつくるのめんどくさいし…
やっぱりそういうものなんですね chesen,kakasi,mecabどれがいいのか悩みます kakasiは辞書ファイルが薄い mecabはchesenの改良版 chesenは除外してkakasiとmecabを選ぶならmecabだろうけど インストールサイズが小さいkakasi
>>482 def foo
begin
fooに入った直後に実行
yield
ensure
fooに入った直後に実行
end
end
foo do
メインのコード
end
勝手に
>>488 を改善
def foo
__daemon__ do
メインのコード
end
end
def __daemon__
#
>>488 と同じなので省略
end
private :__daemon__
redmineって1.9.2じゃ動かないのですか?
491 :
デフォルトの名無しさん :2011/11/06(日) 17:26:22.85
>>488 間違えた
def foo
begin
fooに入った直後に実行
yield
ensure
fooから抜ける直前に実行
end
end
foo do
メインのコード
end
>>491 ありがとうございます
プロジェクト管理はredmineっていうぐらい聞くのでredmineが使えないのはきついですね
ご紹介してくださった2つも検討してみます
>>492 def foo
fooに入った直後に実行
yield
ensure
fooから抜ける直前に実行
end
でいい。begin-endは不要
495 :
490 :2011/11/06(日) 19:59:58.95
496 :
デフォルトの名無しさん :2011/11/06(日) 20:29:22.55
ruby1.9と相性の良いLinux ディストリビューションてありますか? お勧めを教えてください。
特にはない GCCコンパイラがきちんと利用できるのなら自力コンパイルには問題はない パッケージとして安楽に利用可能なディストリビューションというのは現時点では存在しない ぜんぶ自力でコンパイルとパッケージ非依存でインストールするのが早道
きちんとパッケージングされ続けているディストリビューションってないよね まだ文句言いながらrvm使うしかないのか
>>496 今あなたが使っているディストリかな
Linuxならだいたい問題ないかと
最悪ソース落としてコンパイルすりゃいいし
…今使ってるディストリなんてねーよ!ってんなら
Linux板で聞いてくればいいんじゃね
Rubyと言ったらDebian一択だろ
たいへん残念なことに ・ Ruby本体が動作確認に使用している と ・ ディストリビューションがRubyをサポートしパッケージが最新に追従している ・ 標準追加ライブラリシステムのRubygemsが適切に使用・更新される ・ Rubygemsのライブラリのインストールと管理が平易 ・ 外部ライブラリ(に必要なファイル)の導入や自力コンパイルや更新が容易 の間には関連性がない ぶっちゃけいちばん簡単なのはWindowsのActiveScriptRubyだぞw
WindowsはWindowsで色々と問題に遭遇するが 現状でWindowsしか無いというならASRいいよね 個人的にはRuby-mswin32のzipのやつを使ってるが、PATHの通し方知らん人間には流石にすすめないし
Linuxとして使いやすいの選ぶというのが無難だと思う むしろLinuxでなければいけないのかというところから っていうか、普段からLinux使ってないのならやめとけとしか
パッケージの話をしてんねん
rubyinstallerでインストールしているのですが zipのをダウンロードして実行フォルダにパスを通すだけでいいですか?
用途はruby1.9.2を今入れているのですがruby1.8も入れたいので フォルダ名をrubyにしてフォルダ名を変更するだけでバージョンを切り替えられるようにしたいのです
むしろPATHの切り替えで実現すべきじゃないのかなそれは
うむ、フォルダ名の変更で対処するのはちと厳しい ruby1.8用のパスを読み込むバッチファイルとruby1.9用のパスを読み込むバッチファイルを併用するのがよさげ
インストーラ付きのを2つ入れると環境変数や関連付けやコンテキストメニューの取り合いになるから 移行期間中は一方をzip展開する奴にして ↓とかやって呼び出すのがいいんじゃね call setrubyenv19.bat ruby -x "%~f0" goto :eof #!ruby puts "hello ruby 1.9.x"
pik使うんじゃだめなんか? 昔はjunction.exeで切替えたりしてたな
>>481 > そこでいう「カレントディレクトリ」って、プロセスの?
> それとも「require 'hoge'」が書かれてあるファイルが置かれているディレクトリのこと?
後者。
468の説明はおかしいと思う。
require_relative "hoge" は、require File.expand_path("hoge", Flie.dirname(__FILE__))
と実質等価、のはず。
rubyのバージョン複数扱うならrvmじゃね rvm default # システムのデフォルトに(たぶん1.8.7) rvm 1.9.2 # 1.9.2に って感じで簡単に切り替えられるぞ
>>512 さんくす。
ということは、require_relative()は何に対してrelativeかというと、
require_relativeを呼び出しているファイルを起点にしてrelativeである、
ということですね。
たとえば、今までなら
require(File.dirname(File.dirname(File.dirname(__FILE__))) + "/test_helper")
とか書いていたのが
require_relative("../../test_helper")
と書けるようになるわけか。
これは便利だなあ。
c/:www/cgi以下にtest.rbとかindex.rbというCGIファイルがあります これをrubyで簡易サーバとして動かす機能ってありませんか? localhost:8888/test.rbにアクセスできて表示できると楽なんです
webrick cgi なんかでぐぐってみて
WEBrick
すいません。うまいぐあいにxmlをちゃんと整形した形で出力するためには どうすればいいのでしょうか? <?xml version='1.0' encoding='UTF-8'?> <A> <C>2</C> <U>2011/11/08 01:09:02</U> <H> <V>192.168.1.2</V> <V>192.168.1.2</V></H> </A> 要素Hに子要素Vを入れて出力した結果が上です。ちゃんとVを整形した形 でだしたいのですが、うまくいきません。どのようにすればいいのでしょうか・
馬鹿には無理
>>521 どーせ、わかんないでしょ
タグでインデントするプログラムなら組めるけど、
そんなプログラムで読み込んで整形なんてやらないと思うから聞いてるだがね。。
馬鹿でも無理さんrubyスレでも湧くんだ…
Ruby には無理
>>523 初めてきたの意味わかんない
>>524 やっぱりそうなの?
さっきあきらめてxmlindentをインストールして
cat in.xml | xmlindent -i 4 > out.xml
で強引にやったんだけど、うーん
非効率だね。出力の段階でどうにかしたい。
とりあえず、ありがとう。
他にもあるか知らんけど、nokogiri使うんじゃダメなん?
>>526 明日ためしてみます。
ちなみに
REXML::Formatters::Prettyでできた^^
自分で試せば判ることを何故ここで聞く
今からrubyに手を出そうかと思っているものですが、 たのしいrubyの2版は現行のrubyを学ぶのには不足、時代遅れなところがあったりするでしょうか
うるせえ黙って本開いて読み終わってから質問しろや
Rubyで作られたWebサイトってCGIとして動かしているのでしょうか?
メソッドからの戻り値はreturnを書くのかと思ってたけど、 rubyでは通常はreturnを省略する、ってマッツの本に書いてあった けどマジ?
>>533 処理途中で戻る時以外はreturn書かないことが多いな。
LISPの影響かも。
>>532 そこでCGIが真っ先に出てくるのなら、あなたが書いてレンタルサーバ上で動かすようなスクリプトはおそらくCGIのはず
>>533 別に書いてもいいけど、決して速い処理じゃないから、
あらゆる自作メソッドに全部律儀にreturnつけてたら全体的に遅くなるよ
「メソッドの最後の処理の値が戻り値(返り値)として自動で返る」で充分な場合は、returnは書かないほうが好ましい
ただ、稀になにがなんでも書かない(returnを書かなくても動作する不自然な構造で作ろうとする)人がいるんだけど、
returnを書いたほうが明快なジャンプ構造になる場合はちゃんと書いて欲しい
遅いったって、そんな目に見えて遅くなるわけじゃない
なんで遅くなるの
1.9だと同じになるっぽい
>決して速い処理じゃないから えー
実行しようとしているコンソールがサポートしている文字コードを調べる方法ってないかな DOS窓だと基本UTF-8は文字化けするけど、netbeansはutf-8の方が都合が良いし その他のコンソールの場合も考えて対応している文字コードに合わせて出力する文字コード切り替えたいんだけど どうやったらいいんだ?
chcp 65001
それはUTF8に切り替えられるけど、フォントはスクリプトから変更できないから配布の際に困るだろ
chcpって、実際には全然使えないよね 1.9.3からはwindowsでもutf-8のまま出力して大丈夫なようになってる
544 :
uy :2011/11/09(水) 06:41:47.72
1.93Sugeeeって一瞬思ったけど出来るんなら最初からやれとも同時に思った
ルビー初心者です、質問させて下さい。 ダブルクォーテションで囲ってるにも関わらずバックスラッシュnとかtが改行やタブにならずそのまま表示されてしまいます 何が原因でしょうか? バージョンは1.8.7です。よろしくお願いします
>>545 p "hoge\nfuga" とかしてるとそうなる
p はデバッグ用なのでprintやputsを使う
次からソースも貼ってね
>>546 ありがとうございます
ちょっと今手元にPCないので後で試してダメならソース貼ってみます
お前らがどんなにピーピーギャーギャー言ったって 強がろうが俺をバカにしようが このゴミRubyが大失敗超不人気のPerl以下の汚物 だって事実は変わらないの わかった?負けず嫌いの小学生みたいな負け惜しみ見てると滑稽だよwwww 可哀想になってくるわほんとに まあお前らも最初は被害者だったんだよな、妄想と大風呂敷に踊らされてよ でもな、もっと早くに気づいたたゆらはいっぱいいるだろ? いまでもこんな酔っ払いが吐き戻したゲロみたいな言語を一生懸命庇ってさ 本当の事を指摘している俺がおかしいみたいな感覚になってるんだぞお前ら?www 粋がっちゃったけど結果大失敗でものすごい負け犬感味わってるんだろうから気持ちは解るけどよ いいかげん現実見つめろや?wwwwな?wwww 実際、今どうなのか言ってみろよ?wwwおい?wwwwww このゲロみたいなくっせえゴミRubyは使われてるの? 流行ってるの?ヒットしてるの?日本だけだろwww 発表時みたいな状況になってんのかよ?wwwwwwwww 俺Rubyやってるんだぜ!って人前で言えんのお前ら?wwwwああん?wwwwwwwww ゴミ言語すぎてそんなの人前で言えるわけないよなwww
大失敗超不人気のPerlとか朝釣りにしてもひどすぎる
>>548 前からずっと思ってたんだけど、それ意味ないよね
こちらが知りたいのは試してどうだったかであって、あなたがレスをいつ読んだかどうかじゃないよね
「とりいそぎお礼まで」厨はパソ通やfjやMLの太古から延々槍玉に挙げられてるな
興味のレイヤーが根本的に違うんだよな こればっかりは仕方ないわ
スレタイに沿った書き込みが多いのは当たり前なんで、「こうした方がいいぜ」と言い続けてりゃ良いんじゃないの?
もっと大きな心をもてや
Rubyの話を、 しよう
どうぞ
>>546 ダメでした
ソースは
#/usr/bin/ruby
print("b\n")
だけです。文字コードの問題でしょうか?
rubyで画像を表示させる方法ってございませんか?
560 :
デフォルトの名無しさん :2011/11/09(水) 15:44:31.86
558です、自己解決しました。 ターミナルとエディタを別画面で操作したかったのでX11でEmacsを起動、編集してたのですが、ここでバックスラッシュを押しても\になるのがダメだったみたいです。試しにターミナル中ででEmacsを起動してみるとバックスラッシュが\になりうまく行きました。 原因がわからず気持ち悪いのですが、ありがとうございました
562 :
560 :2011/11/09(水) 16:16:27.76
rubyで、helloworldをできません
http://rubyinstaller.org/から 、Ruby 1.9.3-p0をダウンロードして、インストールしました。
コマンドプロンプトで、ruby -vをしたら、ruby 1.9.3p0 (2011-10-30) [i386-mingw32]と、でます。
から、インストールを、できたと思います。
次に、helloworld.rbファイルを作って、
ruby helloworld.rbをしましたが、
ruby: No such file or directory -- helloworld.rd (LoadError)に、なります。
どうしたらよいでしょうか?
563 :
560 :2011/11/09(水) 16:29:33.83
自己解決しました。 拡張子の表示を、表示しない設定のため、ファイルの最後に.txtが入っていました。 失礼しました。
>>561 emacs-gtkはなにも設定しない場合、「へ」の隣あたりの、日本語キーボードで円記号が印字されてるキーを押すと \ を入力する
これはもろちんバックスラッシュではなく、YEN SIGN だ
基本的には「ろ」の \ を使え
いやん化けた キーボード右上あたりの円記号印字キーを押すと ¥ になるので「ろ」を使うかEmacsの設定しとけ
WEBRickで相手サーバにProxyConnectionを送らないようにしたいんだけどどこを変えればいいですか?
今Ruby1.9.2をWindowsで勉強しています 1.9.3がでたようなんですが1.9.2と1.9.3って違いありますか? アップグレードして1.9.3で書くのに慣れるべきでしょうか?
>>567 初心者スレ的な違いはないと思ってくれていい
1.9.3-p0のpが増えたリリースが出たら1.9.2から移行する予定
パッチレベル0の避けられ率は異常 1.8.6-p0のトラウマかなんかか
今日から始めるのでRuby1.9.3poをRubyInstallerからダウンロードしてインストールしましたがやめたほうがいいのですか?
初学者が簡単にバグにぶち当たれるほどテストしていないわけじゃないから そんなに心配することはない
JSONの整形ライブラリってありませんか?
>>573 $ gem search json -r
group_byとかしらなかったわ。こういうのってリファレンス読んで見つけるの?
576 :
デフォルトの名無しさん :2011/11/09(水) 21:35:15.90
>>573 整形って、うまいことインデントしてくれるモノ?
そうです
JSONなんてパーズが済めばHashとArrayなんだから、 インデント付きの文字列表現が欲しいだけなら 標準添付ライブラリのpp(pretty print)を使えばいいのでは?
Windowsの1.9.3p0は テキストモードのIO書き込みがLF改行になっちゃうので もうちょっと待ったほうがいいかもね あと、-dオプションつけると Exception `LoadError' at 省略/lib/ruby/1.9.1/rubygems.rb:1243 - cannot load such file -- rubygems/defaults/operating_system Exception `LoadError' at 省略/lib/ruby/1.9.1/rubygems.rb:1252 - cannot load such file -- rubygems/defaults/ruby ってでるのがうざい 実害は無いけどバグなのかな?
俺も今日、each_with_objectというのがinjectでハッシュ作るより便利なことに気づいた
やっぱ初心者は.1.9.2からはいったほうがいいんですか? puts "こんにちは"で表示されなくなったりするバグとか出ても対処できない
Ruby-1.9.2-p290 Microsoft Installer Package(2011-08-25) で nokogiri使えるの?1.5.0でエラーが出るんだけど
>>584 require 'json'
data = JSON.parse('{"a":"aaaaaaaa","b":"bbbbbbbbb"}')
print JSON.pretty_generate(data)
>>585 ruby astyleでぐぐってみたのですがrubyに関する情報が見当たりませんでした
わたしの検索の仕方がまずいのかもしれません
>>586 これで思う結果になりました
>>584で書いたマニュアルURLにparseとpretty_generateっていうのが載ってなかったのでやっぱRubyはマニュアル難しいです
588 :
デフォルトの名無しさん :2011/11/10(木) 20:37:06.69
>>584 JSON表現はただのStringになってしまう。
それをまた構造をパースしつつインデントを付けて回るより、
pp(to_jsonを呼ぶ前のオブジェクト)
でいいんじゃないの? という話。
{"a":"aaaaaaaa","b":"bbbbbbbbb"}をRubyのハッシュリテラルと勘違いしてないか
590 :
583 :2011/11/10(木) 22:10:26.01
自己解決。RubyInstallerにしたらNokogiri動いた。
だれかrubyのrpm を作るspecファイル頂戴
まだredhat系は1.9をパッケージにしてないのか どうしようと思ってるんだろ?
1.8を捨てるのが無理なんだろ 下位互換を考えないからこんなことになったのだ
1.8.x=XP 1.9.x=Vista
そもそもRubyは下位互換なんて考えないような言語だったのに、 あまやかすからバカが湧いてくる。
遊び以外で使ってるとupdateするたびにいろんなgemの下位互換がなくなってて 書き直さないといけなくてクソだるいだろ railsで実用的になったのがダメだったのか
何でRubyのBOTって迷惑なことするんです? @rubyist_bot←迷惑メール級にいらない
>>597 report for spamしたらRTされなくなるよ
599 :
583 :2011/11/12(土) 13:51:19.15
ウィンドウズでユニコードファイルって扱えますか? Dir.openで開いて読み込むとその時点でファイル名がwindows-31jになってるんですが ruby1.9.2です
ナンバー取り忘れてた。すまそ
>>597 一瞬Ruby製のbotかと思った
Rubyに限らずRTとかリプライとかしてくるbotはいっぱいある
ああいうの、RTするならするで@つけない非公式RTにしてくれたらいいのに
Open-uriを利用してJavascriptが有効でないと表示できないページを取得するのは不可能ですか?
見せかけだけでもいいのですが
新Twitter(
http://twitter.com/#!/*** )を、open-uriで取得しようとすると
Javascriptが有効である必要がある
と表示されてユーザー情報が表示されません
もし、Open-uriで不可能であれば何を用いれば利用できますか?
>>599 openするときにエンコーディングが指定できるようになってる
open('hogehoge','r:UTF-8')
あとで変更することも出来る
f = open('hogehoge','r')
f.set_encoding('UTF-8')
いきなりファイルから読み込むIO.readなんかだとハッシュオプションで指定する
IO.read('hogehoge',encoding:'UTF-8')
Ruby リファレンスマニュアル
http://doc.ruby-lang.org/ja/1.9.2/class/IO.html
>>599 Dirは、内部ではユニコードで取得してるんだけど、その後filesystemのエンコーディングに変換して返しちゃってるみたいだな。
文句言えば修正してもらえる可能性もあるが、当分無理だろうな
中身がrb_encdb_alias("filesystem", "UTF-8");だけの拡張作ったらUTF-8で返ってきた
Dir.openはエンコーディング指定できるみたい(マニュアルに無いけど) Dir.open('/', encoding:'UTF-8') でも、Dir.glob は問答無用でWindows-31Jに変換されちゃうな
Dir.glob("*.*".encode("UTF-8"))
もう実装されてたんかい
609 :
599 :2011/11/12(土) 21:27:40.61
>>603 詳しい回答ありがとうございます。IOに「ファイル名のエンコーディング」の項目がありました。
読んでいませんでした。すみません。IO.readでエンコードを指定するのにはハッシュを使うのは初めて知りました。
>>606 試してみたらうまくいきました。ありがとうございます。リファレンスには書いてないんですよね。
ハッシュでのオプションの指定というのが今までよく知らなかったので勉強になりました。
ありがとうございました。
>>602 そのためにTwitterでAPIが用意されてるでしょ
>>607 なるほど
引数のエンコーディングと同じエンコーディングで返ってくるのか
>>602 たしかtwitterのスクレイピングは規約違反
API使え
ってか、gem twitter を使えばいいのでは
ドキュメントのHash.new { |hash, key| ... }の説明で「ブロックの評価結果がデフォルト値になります」って 書かれているのに、サンプルコードは h = Hash.new {|hash, key| hash[key] = "foo"} となっていて気持ち悪いです。 h = Hash.new {|hash, key| "foo"} ではダメな理由があるのでしょうか?
ハッシュはサーバに送信されないんだから大人しくAPIを覚える作業に入ってればいいよね
RubyにはJavaと同じようなpublicとprivateとprotectedというものはクラスにはないのですが?
public, protectedはあるね privateは随分意味が違うな
その部分はやっぱりRubyにある思想というものが影響しているからでしょうか?
適当に実装しただけなので、気にするな
>>613 たぶん
h = Hash.new{|hash,key| "foo"}
p h['bar'] # "foo"が返ってくる
p h # だがハッシュはそのまま
p h['bar'] # 何度でもデフォルトブロックが呼ばれる
h = Hash.new{|hash,key| hash[key]="foo"}
p h['bar'] # "foo"が返ってくる
p h # ハッシュも更新されている
p h['bar'] # 二回目以降はデフォルトブロックが呼ばれることはない
>>619 なるほど!すっきりしましたありがとうございます
俺がRubyを学ぶ理由 ・国産の言語だから ・PythonスレよりRubyスレの住民のほうが親切に回答してくれる人が多いから ・PHPしかできないとバカにされるから
>>615 同じような動作をするものはない
名前は同じだが動作は全く違う
言語構造が違うからそもそも同じ動作になるはずないじゃん、というのが一応の答
実際にいちばん近いのは
>>618 「JavaやC++にあるやつをRubyで作ってみようシリーズ」の負の遺産は他にも attr_accessor とかがある
623 :
デフォルトの名無しさん :2011/11/13(日) 23:48:08.97
メタプログラミングRuby読みながら Class.newではクラス名を指定するときに ClassName=Class.new do # 初期化コード end とかしないといけないとあるけど 第1引数にシンボルか文字列が来たら、クラス名にする foo = Class.new :Foo とか実装予定無いかな…
現状だとこう? foo = Foo = Class.new これ↓は分かりにくいかな。 foo = class Foo; self end
rubyのソースコードってperlみたいで汚いよね
>>623 :Fooを動的に変更したいならこんなんで
klass = Class.new do ... end
Object.const_set(:Foo,klass) # klassの所にClass.newを埋め込んでも可
何故Rubyを学ぼうと思ったのですか? Perl,Python,PHPを置いてRubyを選んだのは何故ですか?
CGIで日本語を表示させようとすると500エラーになって動きません 日本語の部分を英語にすると動きます ファイルはUTF-8 BOMなしです どうやって日本語を書いても500エラーが出ないようにできますか? #!C:\\Ruby193\bin\ruby.exe print "Content-type: text/html\n\n"; print "あ"
>>627 何故Rubyを学ぼうと思わないのですか?
Perl,Python,PHPを置いてRubyを選ばないのは何故ですか?
630 :
627 :2011/11/14(月) 11:24:54.99
理由は分からないため質問してます
>>627 俺はPythonやPerlよりも先に学んだからかな
そのお陰でメソッドチェーンしにくいのはどうも使いにくい
PHPはそもそも用途が違うじゃん
>>627 PerlはCPANがあるから使っていたけど言語には不満があった
Rubyは言語的にはPerlよりもずっといいし
gemも充実したからRubyを使うようになった
PHPはテンプレートエンジンだし論外
>>631 #!D:\Programs\Ruby193\bin\ruby.exe -Ku
って書いたら日本語で表示できました!
これっておまじないとして書いておかないとだめみたいなルールなんでしょうかね
これからは-Kuを書くようにします
# coding: utf-8 入れてないだけだったりして
>>635 コマンドラインで練習してたときは書いてましたがCGIのときはHTMLでmetaのcharsetで文字コード指定するから書かなくていいと思ってました
「書かなくていい」ってどこに書いてあった?
>>636 別にshebang(#!なんちゃらかんちゃら)書いても2行目に書けるから書いとけ
HTMLのmetaで指定しようがRubyには関係ない
1.9のマジックコメントは必須
-K オプションはあくまで1.8からの以降用だからマジックコメント使っとけな
いや、1.9でもKでおk
マジックコメントの -*- って書かなくてもいいんですか? Emacsのためにあるとか聞いたような気がするんですが
>>637 すいませんブラウザで表示したときにファイルをUTF-8にしてmetaで文字コードを指定しておけば大丈夫だと思ってました
>>638 これからは2行目に書くようにします
念のため- Kuも書いておいたほうが完璧ですよね
642 :
628 :2011/11/14(月) 13:08:17.71
今の1.9ならCGIAltに置き換わってる
>>641 「ファイルをUTF-8にしてmetaで文字コードを指定しておけば大丈夫」だとどこに書いてあった?
>>642 RubyはCGIに向いてないしGUIにも向いてない
まじすか TwitterってRubyでかかれてたらしいのでCGIを使ってると思うんですが Twitterぐらいのアクセス量でも問題なくアクセスできるのでRubyでCGIやりたいと思った次第です
TwitterはもうRuby使ってないよ
>>646 CGIに向いてないのはライブラリがうーんって感じなのが大きい
このスレで、○○は向いてないって言うやつは、ただ知識がないだけなので無視していい
驚き最小の法則()
>>646 TwitterはRubyを使ってたけど遅いCGIは使ってないはず
CGI(とCGIの代替になるもの)について調べたほうがいいよ
なんですかそれは mod perlみたいなものがRubyにもあるのですか? おしえてください
>>652 RubyでウェブといえばRuby on Railsだろ
httpdとアプリがくっついてる
webrickのことだよ
webrickはcgiとして動くものではないのですか? Ruby on Railsはインストールが分らなくて挫折しました twitterはnginx+rubyで動いてました
656 :
デフォルトの名無しさん :2011/11/15(火) 14:37:53.20
モジュールにクラスメソッド?を定義するとき、 module Module class << self def class_method とか module Module def self.class_method とか方法があるみたいですが、どっちを使ってますか。 もしくは、使い分けとかあるのでしょうか。
いくつも定義するときは特異クラスにしてる
どれでもよい def を書いて自力でメソッドを定義するぶんにはまったく違いはない スレ的なおすすめは後者だが、最近の非初心者層には前者の class C class << self # ここでインスタンスメソッドの定義の書き方をするとクラス/モジュールオブジェクトに定義される end end というのが人気 「インスタンスメソッドの定義の書き方」というのがミソで、たとえば class C class << self attr_reader :hoge end end と書くと C.hoge が定義される(参照される変数 @hoge はいわゆるクラスインスタンス変数になる) メソッドを定義するメソッドとかを使いたい場合は class << self ... endじゃないと逆にめんどくさい
>>657-658 サンクス。
なるほど特異クラスの方が流行りなんですね。
特異クラスだとインスタンス変数も(メソッドと同じように)
クラスインスタンス変数になるんですね。
すいません ある特殊な文字列のみ変換の対象を外し、それ以外は文字変換の対象 にするようなプログラムの例を示してくれると助かります。 例として >のgの文字は変換の対象からはずし、他のgは文字変換の対象とする。もっと具体的に >>giants is great のような文章中に存在するgを<b>g</b>で囲いたいのですが、普通に全変換していまうと &<b>g</b>t;となって、実体参照が可笑しくなっていまいます。いいプログラムのやり方が思いつかないのでよろしくお願いします。
661 :
デフォルトの名無しさん :2011/11/15(火) 23:54:58.22
& g t ; の並びに含まれる g を除くというのはこうだろうか。 gsub(/(?<!&)g(?!t;)/, '<b>g</b>')
662 :
デフォルトの名無しさん :2011/11/15(火) 23:58:18.25
初心者的には、 素直に置換してからやり過ぎてしまった置換だけ元に戻すという手がよいかも。 gsub(/g/, '<b>g</b>').gsub(%r[&<b>g</b>t;], '>')
663 :
デフォルトの名無しさん :2011/11/15(火) 23:59:18.94
しまった。最後の実体参照がしっかり置き換えられてしまった。察して。
その例なら一旦実態参照を戻せばいいんじゃね? require "cgi" str = ">giants is great" p CGI.escapeHTML(CGI.unescapeHTML(str).gsub("g", "<b>g</b>"))
それはダメだ
666 :
デフォルトの名無しさん :2011/11/16(水) 00:15:10.17
<b> とかのまで置き換えられてしまうね。
こんなのはどう? 実体参照も置換対象にしてしまう で、gのみの場合だけ置換して違ったらそのままにする gsub(/&[A-Za-z]+;|g/){|m| m == 'g' ? '<b>g</b>' : m}
668 :
660 :2011/11/16(水) 08:24:52.80
みなさん、ありがとうございます。やはり難しいみたいですね。 実際は変換したい文字はgだけではありません。t gt ; などやすべて文字が 対象です。普通に考えたらきりがありませんので、変換の対象ならないように(実体参照の文字とタグ内の文字)を検索の対象から外したいのです。 イメージとしてはcntC+fで文字検索すると黄色いハイカラーが文字つきまよね?あんな感じでフォームで文字入力して変換した文字をhtmlに吐き出す最終的なものです。 もし、よろしければ、アイデアだけでもいいので良い考えを持っている人がいれば是非宜しくお願いします。ずっと考えても思いつかないんですよね。
669 :
660 :2011/11/16(水) 08:29:13.68
×フォームで文字入力して変換した文字をhtmlに吐き出す最終的なものです。 ○フォームで任意の文字入力して変換した文字をhtmlに吐き出すのが最終的な目標です。
何が難しいんだ
>>670 自前で読み込み位置の情報を保持すること
非対象文字列が出るまで1文字ずつ読み込み、非対象文字列が出た時点で
(または、非対象文字列正規表現にマッチする文字位置で元文字列を2つに割って)
非対象文字列の直前までの文字列に対して着色 gsub をかけて、
着色結果に非対象文字列を連結して、
非対象文字列が出るまで1文字ずつ読み込み、非対象文字列が出た時点で
(または、非対象文字列正規表現にマッチする文字位置で元文字列を2つに割って)
非対象文字列の直前までの文字列に対して着色 gsub をかけて、
着色結果に非対象文字列を連結して、
というようなことをえんえんやればいいような気がする
StringScannerでやれば簡単じゃん
674 :
デフォルトの名無しさん :2011/11/16(水) 09:56:53.82
675 :
デフォルトの名無しさん :2011/11/16(水) 09:57:53.74
676 :
片山博文MZ :2011/11/16(水) 10:25:13.44
ふふふ、諸君はわたくしに勝てるかな。。。
677 :
デフォルトの名無しさん :2011/11/16(水) 10:40:17.76
>>670 行き着く先繰り返しですよね
ある任意のhtmlのソースを読み込んで、もちろん実体参照はこわれないようにして、表示の一部分のみ変換する
初心者スレではなかったかもしれません
>>673 scanでは結構むずかしです。一文にマッチするパターン、否定するパターンが混在するからです。そのパターンを網羅すると相当なことになります
678 :
デフォルトの名無しさん :2011/11/16(水) 10:41:47.17
どういうものを処理しようとしてるのかいまいちわからんが、簡単に処理しちゃだめなんか? scnr = StringScanner.new("ampm & lawson") rep = "" m = "a" while r = scnr.scan(/(&\w+;|#{Regexp.escape(m)}|[\w\W])/) case r when m rep << "<b>" << r << "</b>" else rep << r end end
戻り読みすればいいんじゃねと思ったら戻り読みで繰り返し使えないのな
682 :
デフォルトの名無しさん :2011/11/16(水) 11:57:58.17
>>677 >ある任意のhtmlのソースを読み込んで、もちろん実体参照はこわれないようにして、表示の一部分のみ変換する
質問の最初に、まずこの一文を書くべきだったね
>>660 の内容では、スレ住人が単純な文字列置換だと認識してしまうのは当たり前
トップダウンに最初に最終的な目的(上の一文)を書いてから次に具体的な問題を書く、文書作法を身につけなさい
で、最終目的がこれだとしたら、おそらくHTMLのタグ名や属性、文書型宣言、コメント....etcの
マークアップ要素は無視して、生のユーザテキスト部分だけを置換対象にしたいということなんだろ?
そうであるなら、
HTMLパーザでHTMLの構文ツリーを作成して、
そのツリーをルート要素から順に辿りながら、
テキスト要素についてのみ置換を実行する
という処理が必要になる
HTMLパーザについては、たとえばxmlscanのようなライブラリがあるから、
自分に合うものをRAAやRubyForgeで探して利用しなさい
あるいはRacc等の字句解析/構文解析処理の知識があるなら、自力で書くこともできる
>>682 じゃあタグ除外するようにすりゃいいじゃん
一文字ずつ読み込んで処理して<が出たら>が出るまで無視、&が出たら;が出るまで無視じゃだめなん?
686 :
660 :2011/11/16(水) 12:25:44.59
>>683 その通りの理解です。であるので相当複雑です。説明不足だと思います。
一応いろいろ調べてみます。htmlパーサーですか。やはりツールを使うのか
イメージとしてはyahooのトップページのソースを右クリックで保存して、フォームから任意の文字列を入れて、その文字のみ装飾する(例えば色つけるなど)プログラムを打ちたかったのです。
簡単にやるなら680の正規表現にタグの正規表現を追加。 真面目にやるならjavascriptで処理。
実際にhtmlの処理に必要なのは、どれだけ間違ったhtmlを処理できるかになるから、ブラウザ利用するのが最強 jqueryのハイライトプラグインでも使ったほうが手っ取り早い
689 :
デフォルトの名無しさん :2011/11/16(水) 13:30:36.23
>>686 俺PHPで文単位に切り分けるプログラムを書いたことあるけど、かなり遅かったよ。
ファイルの大きさに対して指数関数的に処理時間が増加する感じだった。
これたぶんメモリーの使い方が悪いんだよね。
PHPが糞だからとか、お前のコーディングが糞だからって言いたいだろうけど、
たぶんRubyでも誰がやっても同じ結果になるんじゃないかな。
俺がやったやりかたは、ブロック要素を切り分ける必要はないってことと、インライン要素は
切り分ける必要があり、且つ切り分けに何も問題がないって考えで、テキスト側から
切り分けた後、タグの優先順位に従って再合成した。
初心者におすすめの開発環境を教えてください
テキストエディタと端末
netbeans
テキストエディタと端末
るりまに [[trap:Regexp]] とか [[trap:Numeric]] とかいった記述があるんだけど、 これなあに?
Wiki記法の変換漏れかなんかじゃないか
HTMLの整形なんてどうすればいいのか知らなかったけど Nokogiriとか使えばいのかな?と、gem installして色々試してみた パースすると実体参照は通常の文字に展開されちゃうんですね #coding:UTF-8 require 'nokogiri' require 'cgi' file = 'nokogiritest.html' word = /g/ doc = Nokogiri.HTML(IO.read(file)) doc.search('body//text()').each do |node| next if node.parent.name == 'script' next if node.parent.name == 'style' if node.text.match(/#{word}/) reptext = CGI.escapeHTML(node.text).gsub(/&[A-Za-z]+;|#{word}/){|m| word === m ? "<b>#{m}</b>" : m} node.replace reptext end end puts doc.to_html 多少HTMLの体裁が変わるけど、こんなんでいいのかな? あとは、エンコーディングとかをケアすれば いままでHTMLからのデータ抽出は正規表現でゴリゴリ書いてたけど HTMLパーサー使うと簡単だったのか
ちゃんとしてないhtmlで破綻するから、ゆるゆるのパーサを自分で書いたほうが使える
NetBeansで始める事にしました。ありがとう
for文マジ使わないのな。内部でeachとかもうね。存在意義がわかんね。
forの概念がないとループを書くことすらできない人用 自転車の補助輪みたいなもん 動作はするがガラガラうるさいし本体の利便性は9割ほどダウン
それは全然違う
ループすら書けない香具師もドカタには多い a1 = 10 a2 = 20 a3 = 30 ・・・ とか延々と書いてあるソースみて卒倒したことがある
rubyのforは他のとまったく違うよ
while になるような for のほうがよかったな
ならforとwhileは他とどうちがうの?
rubyでfor使ってたら、上級者っぽく思えるぞ
rubyは非直感的すぎて理解出来ない
h = { hoge: 'aaa', fuga: 'bbb', piyo: 'ccc' } for k, v in h puts "key:#{k}, val:#{v}" end h.each do |k,v| puts "key:#{k}, val:#{v}" end
JSみたくこういう書き方ってできないの? h = { hoge: 'aaa', fuga: 'bbb', piyo: 'ccc' foo: function() { return this.hoge + this.fuga + this.piyo } }
711 :
デフォルトの名無しさん :2011/11/18(金) 00:13:33.85
JSのそれは、プロトタイプベースにおけるオブジェクトリテラル { } だということを 考えると、意味的に近く書くには次のようになると思う。 h = Class.new do @hoge = 'aaa' @fuga = 'bbb' @piyo = 'ccc' class << self def foo; @hoge + @fuga + @piyo; end end end p h.foo #=> "aaabbbccc" そこまでして書くもんでもない気がする。
712 :
デフォルトの名無しさん :2011/11/18(金) 00:27:11.13
要は hoge, fuga, piyo は foo からのみ見えてほしい、という要求なんだよね。 JavaScriptで無名functionをクロージャとして使うパターンなら、こうか。 h = lambda do hoge = 'aaa' fuga = 'bbb' piyo = 'ccc' { foo: -> { hoge + fuga + piyo } } end.call p h[:foo][]
すいません超基本だとは思うのですが質問させてください。あるプログラム中から他のプログラムを起動させるにはどうすれば良いのでしょうか?
systemのこと?
715 :
デフォルトの名無しさん :2011/11/18(金) 00:51:55.38
一番単純なのは system
systemでできました!ありがとうございました!
# ruby br.rb phone_number = "0112510110" name = "本部" br = "\n" (s = "") << br << phone_number << ": " << name << br if br == "\n" print s elsif br == s print "Why?" end BR = "\n" (s = BR) << phone_number << ": " << name << BR if BR == "\n" print s elsif BR == s print "Why?" end
>>717 String#<<はself(左側)を返すから
<<はオブジェクトそれ自体を変更しちゃうメソッドだから。つまり s = "abc" t = s t << "def" とすればtだけでなくsも変更されてしまうから。 早いし+=よりも<<を使えってよく言うけどこの点だけは注意ね
メソッドの説明に書いてあることだな 説明はよく読んで使ってくださいという話にしかならんのだが
大文字ってC言語のconstみたいなものと思ってたが 破壊的メソッドは警告も無く通っちゃうんだな
>>721 定数はあくまで参照先を変更できないだけだからな
オブジェクトの状態を変更させたくないのであればfreezeする
もっとも、これも結局完璧ではない
freezeされたオブジェクトが参照しているオブジェクトには破壊的変更が効く
Rubyにも、コンテキストに応じた型が欲しいと感じる今日この頃。
netbeans使うと補完リストが出てくるまでに5秒以上かかるので警告のダイアログみたいのが出るのですが ここの先輩方でnetbeansをご使用している方は快適なのですか? HSP+公式の専用エディタの経験しかなくて恐縮なんですが 基本的にRubyの開発って高スペックでおこないべき言語なんでしょうか?
× Rubyの開発は高スペックで行なうべき ○ NetBeansでの開発は高スペックで行なうべき
NetBeansやEclipseはメモリ1GB程度だとかなり辛いと思う
何度か言われてるが、Rubyの学習のために別途新規ソフトウェアを導入してそれに習熟するなんてのは遠回りで無駄だからやめとけ Rubyスクリプト書くのなんて普段使ってるやつでいいから 普段使ってるのがそもそもないという場合もありそうだけど
>>724 netbeans使ってる人なんて少数というか、RubyでIDE使ってる人自体が少数派だと思う。
重さに機能が見合わないし……。
729 :
デフォルトの名無しさん :2011/11/18(金) 16:24:14.79
この言語使ってるやつってwillcom信者と同じ匂いがする。 外に目を向けなさい 短所しか見えてこないはず
用途を考えれば短所も糞もなく一番最初に覚えた言語使えばいい領域だからな
>>729 自分はphpしかできないのでpythonかrubyをどっちか覚えておきたいのですが短所ってなんですか?
733 :
デフォルトの名無しさん :2011/11/18(金) 21:39:27.39
はあ
何年経ってもRuby爺さんたちのIDE嫌いは治らんのう
いやそれ煽ってるのおそらくRubyすら使ってない人が一人でやってるだけだし 動的言語はそもそも汎用IDEと相性が悪い上に Rubyの用途的にそこまで根性入れてRubyを対応させる人も出ない いつものエディタとターミナルで書いてテストして実行して書いてテストして実行する以上の大掛りなものが必要なら、そりゃ素直にJavaを使えばいい まさかこのご時世にまさかRubyひとつしか使えないわけでもあるまい? RubyをLinuxの起動スクリプトに採用させようみたいな痛々しさに似ている
何年経ってもRuby爺さんたちのIDE嫌いは治らんのう
このスレ'IDE'に反応して長文で発狂するスクリプトでも仕込んであるのかw
IDEが嫌いなんじゃなくてRubyにまともに対応したIDEがないってだけなんだけどね。
Ruby爺さんがIDE嫌ってるのは * 重い * Emacsで俺IDEを作成済 * IDEの質問がここに持ちこまれると面倒 * 爺さんだから 以上の5点が挙げられる
だれか作っちくりー
741 :
デフォルトの名無しさん :2011/11/18(金) 23:19:05.51
>>738 そんなコストかけて作る理由ないしな
そもそもrubyがIDE向けの静的情報持ってないし渡さない
RDEすら破綻しているというのに汎用でとか無理難題
今XMLパーサってNokogiri使っとけばいいのかな REXMLより早いらしいし
現実問題Windowsでそれなりの完成度でRubyのコーディング支援してくれるのって NetBeandsくらいしかないのに 毎度毎度このアホな流れになるよな。 まあ重かったらテキストエディタ使うしかない。
ていうか 「使いやすくてRubyの開発効率がアップするようなおすすめIDEは今のところ特にないので自分の使え」という事実で発狂するのは 「IDEを使いこなせずにテキストエディタにしがみつくRubyユーザー」などではなく、単にIDE厨なのでは
> 「使いやすくてRubyの開発効率がアップするようなおすすめIDEは > 今のところ特にないので自分の使え」という事実 アプリオリな事実ですね。わかります
Terapadで作業してますがいけませんか
求めるサポートがキーワードの色付け程度でいいならそれでいいんじゃね
751 :
デフォルトの名無しさん :2011/11/19(土) 00:56:54.50
eclipseのrdtじゃ駄目ですか? これしか使ったことないのですが
>>751 自分が使いやすいならそれでいいんじゃないの。
起動が遅かったりときどき妙に重くなる割には大した機能がないから俺は使わないけど。
753 :
デフォルトの名無しさん :2011/11/19(土) 02:14:00.14
これだけレス連ねても「私はIDEが嫌いだ」から 1バイトも情報量が増えていないのがすごいなw
起動もそこそこ早く、動作も軽く プロジェクトを生成しなくとも単体ファイルを扱える手軽さで requireしたCモジュールの補完も効いちゃうよってな PyScripterみたいなのが欲しいな
>>747 たぶんそんなとこだと思うよ
彼がRubyを使っているかどうかも怪しい
使ってなくても煽れるようなことしか書かないし
>>710 意味的+記述の類似性から見て以下が近いのではないだろうか?
(h = Object.new).instance_eval do
@hoge = 'aaa'
@fuga = 'bbb'
@piyo = 'ccc'
def foo; @hoge + @fuga + @piyo end
end
p h.foo #=> "aaabbbccc"
vimがRuby開発におすすめおすすめ言われるので、vimを試そうとしたんだけど Windows上でrubyを入力補完できるvim環境をうまく構築できなくてやめてしまった あれってLinux上なら、簡単に環境を構築できたりするものなの?
>>758 入力補完なんてしないよ
使い慣れたエディタでおk
vimのエディタとしての機能とRubyプログラミングを手助けする機能の融合がウマい、という程度の話でしかない あらかじめvim(gvim)に習熟していないのなら選択する理由は1ミリもない Emacsの選択理由もほぼ同じ
「いいIDEがあれば使うけどまともなものないよね」という話でしかないのに、 どうしても「IDEが嫌いだから使わない」ということにしたい人がいるようだ。 CやJavaならIDE使うだろ。RubyだとIDEで使い物になるのがないからテキストエディタになるだけで。
C++ や Java だと、IDE がないと、 クラスやメソッドが管理しきれないって気がするけど、 Ruby はそういうことで困ることはあんまりないのかな。
ファイルが分散されてるRubyのほうがよっぽど困る
Rubyにはなにか特別ななにかがあってJavaなんかのオブジェクト/メソッド構造よりメソッドが書きやすい、などということは断じて無い よくもわるくもRubyの使用規模が人力検索と人力管理の範疇を越えてないというだけ 現時点でも、管理がめんどくさいことはまあめんどくさい
困ったら p obj.class; p obj.methods とかはやるかな
>>732 おれはpyhonはしらんが、ruby(rails)ならある程度しってる。
rubyってさあ、他の言語の片手間にやる言語だと思う。これを初心者に
やらせるってはどうかしてる。役に立つとしたらにrails。railsは「開発」は早いが動作は遅い。期日が厳しく、動作すればいいって時に使う感じだな。
後の考慮を考えたら、使う意味もないよ。
つーかさぁ
rubyの魅力の一つの
「よく楽しくプログラム」って書いてあるけど、このような書くということは
具体的に良い所がないということを察してほしい。
2chには日本語ちゃんと勉強してからきなよ
わざわざ初心者スレに貶しに来る手合は御苦労な事だが、中級者以上のコミュニティでは相手にされていないというのは、社会人の常識。 俺はC、Java、Rubyその他数種類の言語を工程で使い分ける。 夫々、便利な所も使いにくい所もあるが、今時1つの言語で全部やろうとする方が無謀だしな。
tro:~ nm$ irb >> "O'Reilly".gsub( /'/, '\\\'' ) => "OReillyReilly" なぜ "O\'Reilly" にならないのでしょうか
はい、リファレンス gsub(pattern, replace) -> String 置換文字列 replace 中の \& と \0 はマッチした部分文字列に、 \1 ... \9 は n 番目の括弧の内容に置き換えられます。 置換文字列内では \`、\'、\+ も使えます。これらは $`、$'、$+ に対応します。 $' 現在のスコープで最後に成功した正規表現のパターンマッチでマッチした部分より後ろの文字列です。 最後のマッチが失敗していた場合には nil となります。
>>772 ありがとうございます。 どうすたら \' を無効に殺せるのでしょうか?
PythonとRuby両方使える方に質問させてください WindowsのbatファイルのようなことをLinuxでやる場合はどっちの言語を選択したらいいですか? 現在はどちらが良く使われているものなのでしょうか? Linuxのディストリビューションによって標準で採用している言語も違うものでしょうか?
今はgsubとsubの第2引数を使ってる人はいないと思う ブロックを使う書き方だけになってるはず irb> puts "O'Reilly".gsub(/'/){"\\'"} O\'Reilly 書こうと思えば第2引数でもエスケープで書けるのだが、正しく読むのも正しく書くのもめんどくさい irb> puts "O'Reilly".gsub(/'/,"\\\\'") O\'Reilly irb> puts "O'Reilly".gsub(/'/,'\\\\\'') O\'Reilly
>>773 \を二重エスケープすればいい
p "a'b".gsub(/'/, '\\\\\'') #=> "a\\'b"
p "a'b".gsub(/'/, "\\\\'") #=> "a\\'b"
""の中で\文字を表すのは\\だから
"a\'b"じゃなくて"a\\'b"な。
でもめんどいよね。
>>774 バッチファイル相当なら、PythonでもRubyでもなく
シェルスクリプトだと思うぞ
>>775 ,776 ありがとうございました。 ブロックを使う書き方がわかりやすいので、覚えようと思います。
779 :
デフォルトの名無しさん :2011/11/20(日) 22:49:27.56
RailsのPlug-inを作ったのでちょっと宣伝させて頂きます fixtureを扱うPlug-inですが特徴は下のような感じです 1.yamlよりもcsvを優先する 2.migrationでテーブル構成が変わっても、ロードを停止しないで、カラムの変更点を検知して値を補完する 3.テーブル名と、fixtureのファイル名を一致させないでも自由なロード&ダンプが出来る機能 4.FactoyGirl風の読み込みフィルタで、Fixtureのデータを加工しながら読み込む事が出来る 世間的にはFactoryGirlの流れですが、csvでデータを作ってExcelの方が性に合っていたので これまでのfixtureの欠点を解決する方向で出来ないかな、と 自分で入れたり改良してきたりしていたgemの機能をひとまとめにして見ました
780 :
779 :2011/11/20(日) 22:50:36.39
しまった、スレ間違えました。 流してください…(汗
\u3042は「あ」です ↑ 文字列とユニコードを相互変換したいのですが 便利なメソッドは搭載されてますか?
例によって1.9なら直接できる ruby-1.9.2> puts "\u3042" あ ruby-1.9.2> puts 0x3042.chr('UTF-8') あ ruby-1.9.2> p 'あ'.ord.to_s(16) ”3042” ruby-1.9.2> 'あいう'.each_codepoint{|codep| p codep.to_s(16)} "3042" "3044" "3046" 1.8.7 はpack/unpack必須でめんどくさいっすな ruby-1.8.7> puts [0x3042].pack('U*') あ ruby-1.8.7> p 'あ'.unpack('U*') ”12354” ruby-1.8.7> p 'あ'.unpack('U*').map{|x| x.to_s(16)} ["3042"]
>>782 ありがとうございます
puts 'あ'.ord.to_s(16)を実行すると82a0が帰ってきます
ruby1.9.3p0です
ん、間違ってる
最初 puts でやってて、p のほうが戻り値わかりやすいと思って変えて、ここだけ手で書いたら案の定
ruby-1.8.7> p 'あ'.unpack('U*')
[12354]
pack/unpack は Ruby 1.8.7 でも Ruby 1.9.x でも動く
ruby-1.8.7> p 'あいう'.unpack('U*').map{|x| x.to_s(16)}
["3042", "3044", "3046"]
1.9.x では Encoding 指定不足なときコケるかと思うがそこまで面倒見れんとか書いてたらそのまんまだ
>>783 その日本語文字は UTF-8 ではなく Shift_JIS (というか CP932) だ
UTF-8 の文字を ord にかけろ
ruby-1.9.2> p 'あ'.encode('CP932').ord.to_s(16)
"82a0"
ruby-1.9.2> p 'あ'.encode('UTF-8').ord.to_s(16)
"3042"
>>784 勉強になりました
rubyは文字コードに厳しいですね
い、いや、このへんを厳しいと言われると流石にどうにも Shift_JISなものを渡して、それがUTF-8になったときのUnicode表現をよこせというのはわりと逆ギレに近い
便利辞書的なメソッドとしてあってもいいかなあと思わなくもなくもない 結局、渡される文字のエンコーディングの自動判定が難しいので自力で指定してくれという部分に帰着してしまうが この文字列のエンコーディングが何かというのを意識するのは、意識のしかたを覚えてしまえば決して難しくはない …というか、意識しなくて済むようになる めんどくさいように思うのは最初だけ 飼い慣らされてしまうともいう
>文字のエンコーディングの自動判定が難しいので自力で指定してくれ これなんだよなあ 文字コード考えた人たちがこうならないようにしといてくれれば 煩わしくならなかったんだけど
C:\Ruby>irb C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2095:in `expand_path': non-absolute home (ArgumentError) from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2095:in `_rl_read_init_file' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2078:in `rl_read_init_file' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2499:in `readline_initialize_everything' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:3730:in `rl_initialize' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4737:in `readline' from C:/Ruby192/lib/ruby/site_ruby/1.9.1/readline.rb:40:in `readline' from C:/Ruby192/lib/ruby/1.9.1/irb/input-method.rb:115:in `gets' from C:/Ruby192/lib/ruby/1.9.1/irb.rb:139:in `block (2 levels) in eval_input' from C:/Ruby192/lib/ruby/1.9.1/irb.rb:273:in `signal_status' from C:/Ruby192/lib/ruby/1.9.1/irb.rb:138:in `block in eval_input' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `call' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `buf_input' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:103:in `getc' from C:/Ruby192/lib/ruby/1.9.1/irb/slex.rb:205:in `match_io' from C:/Ruby192/lib/ruby/1.9.1/irb/slex.rb:75:in `match' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:286:in `token' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:262:in `lex' (次レスに続きます)
from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:233:in `block (2 levels)in each_top_level_statement' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch' from C:/Ruby192/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement' from C:/Ruby192/lib/ruby/1.9.1/irb.rb:155:in `eval_input' from C:/Ruby192/lib/ruby/1.9.1/irb.rb:70:in `block in start' from C:/Ruby192/lib/ruby/1.9.1/irb.rb:69:in `catch' from C:/Ruby192/lib/ruby/1.9.1/irb.rb:69:in `start' from C:/Ruby192/bin/irb:12:in `<main>' (エラー出力ここまで)
Rubyのreadline実装と環境変数まわりの問題みたい rbreadline.rbでぐぐれば解決方法説明してくれてるBlogがみつかるよ
794 :
デフォルトの名無しさん :2011/11/21(月) 20:49:16.22
クラスインスタンス変数というのがあると最近しったのですが、 使い所はどんな場合なんですか? これがあるおかげでこんな処理がすっきりかける!みたいな。
わかんなければ必要ないよ、うん これを使うために構造を変えるのはよくない
>>794 使いどころは「クラスに属する変数を使いたいけど、継承関係を超えて共有されると困る」という場合。
使用例は知らね
そのクラスを誰も継承したりしない場合、クラス変数とコンセプト的な違いはない つまり、完全自作スクリプトではほとんど出番がない(attr_accessorで作れるという差はあるけど…) gemとかにして公開する場合は、そのクラスを継承して新しい改造クラスを作る人が出る可能性があるから、 継承で持ち越されるクラス変数に設定値を入れる構造はまずい
>>793 お前は長男か。
あまりにも自分本位すぎる。
解決してお礼を述べてるのに何言ってんだこいつ
解決しましたありがとうございます → 長男 解決したありがとう → 次男 解決したよありがとうおにいちゃん → 三男
801 :
デフォルトの名無しさん :2011/11/22(火) 17:01:08.82
どう解決したか具体的に書けば同じトラブルに遭遇する人が助かるのに 書かないところが自分本位だという話だと思う。
解決方法→rbreadline.rbでぐぐれば解決方法説明してくれてるBlogがみつかるよ
それは解決方法じゃなくて解決なり回避への第一歩だね ぐぐってBlogみつけただけじゃirbの調子はよくならない しかもBlogの記事も環境変数HOME等をクリアしろとかあくまでその場しのぎなもの トラブルの原因になったと思われる環境(Cygwinの有無や環境変数の値など)、 実際に自分はどうやって回避したのか、まで書いてくれれば本当はよかった
>>792 を見て解決したと言ってるのだから、
>>793 はBlogに書いてあることをそのまま実行しただけと推定するのがまともな思考だな。
漏れは推定より確信のほうがいいな
宿題全然わかんないんだけど晒していいの?
答えが返ってくるかもしれないし、無視されるかもしれない 「ここがわかんない」とかじゃなくて丸投げだとスルーされる可能性は高い
宿題スレ落ちてるのか
>>806 Rubyで宿題出すようなとこはこのスレくらいは見てるので、丸写しするとむしろ減点になるぞ
っていうか、授業で習った部分だけでプログラムを書くのは部外者には意外と難しい
Rubyの宿題がでる時代なのか 俺なんて宿題じゃなくて趣味でいつも初歩レベル?の質問をいつもここでしてたのに
コピーされるに決まってるのにコードの宿題を出すようなアホな教師どもが このスレをチェックしてるわけがない
関数の問題で、 def lect(letter,height,width)#長方形 (1..height).map do |n| letter*width end end def emp(height,width)#空白 (1..height).map do |n| " "*width end end def horizon(l_pattern,r_pattern) #上二つの模様を左右に並べる。 end これのhorizonが全く分からなくて困ってます。ヒントにはzipメソッドを使うとか。
どんな動作させたいのか言ってくれないとなんとも なんとなく、 *** ++++ *** ++++ *** ++++ ++++ みたいな出力をさせたいんじゃないかなと思うのだがっていうかhorizonの2つの引数なんだ
チェック柄を作りたいんだ。lectが色の部分、empが白い部分。 引数はこの二つの模様の事です。宿題には左の模様、右の模様って書いてあったから勝手に作ったけどもしかしてこの引数にlectとempが入るのかな。
>>810 一般教養なら結構Rubyやる講義結構あるみたいだよ。
日本語で調べやすくて、それなりにちゃんとしたプログラムが書けて、おまじないが少なくて、
と、講義で取り扱うにはわりと条件がいいからかな。
817 :
デフォルトの名無しさん :2011/11/22(火) 23:31:57.14
irbでlectとempの結果を調べてみるべき。 lect と emp から「各行に並ぶ文字列」の配列がそれぞれ返ってくるから、 lectの結果.zip(empの結果) すればよろし。 …rectだよね?
たのしそうな講義だなあ 元ネタはHaskell本かしら
rectすねすません(;_;) irbで確認しましたけどそれでどうしたらいいのでしょう。
いっそ宿題の画像を上げてしまった方が(ry
引数letterってどういう意味かと思った。文字ならcharの方が良い
あ、本当ですか変えてみます。
どういう模様を作らせたいのかわかりにくい。作らせたい模様を図示しろよって感じだな。 def rect(char, height, width) (((char * width) + "\n") * height).chomp end def emp(height, width) rect(' ', height, width) end def horizon(pattern1, pattern2) pattern1.lines.zip(pattern2.lines).collect{|i| i.collect{|k| k.chomp}.join}.join("\n") end def vertical(pattern1, pattern2) pattern1 + "\n" + pattern2 end def double_horizon(pattern) horizon(pattern, pattern) end def double_vertical(pattern) vertical(pattern, pattern) end h, w = 5, 8 x, y = rect('-',h,w), rect('*', h, w) puts horizon(x, y), '', vertical(x,y), '', double_horizon(x), '', double_vertical(y) こういうこと?
実はチェック柄ではなくチェス盤を作れというものなんです。そのためheightとwidthは8×8になります。特定怖れて偽りましたゴメンなさい、、
じゃあ h = w = 8 a, b = emp(h,w), rect('*', h, w) l1 = double_horizon(double_horizon(horizon(a,b))) l2 = double_horizon(double_horizon(horizon(b,a))) puts double_vertical(double_vertical(vertical(l1,l2))) でいいじゃん。おしまい。 一回自分で考えて書き直さないと多分ばれるよ、ここ写したの。
全くの初心者から半年、Rubyもちょっと分かってきて他の言語に興味出てきて基本を学ぼう!と思い 「プログラムは何故動くのか」を買ってきた。 C言語とかってかなり難しいんだな・・・Rubyでプログラミング初めて良かった。Cなら確実に挫折してた。 ありがとうRuby。
ちょっと待って、1マスの大きさってことは、面積40ピクセルの黒塗り長方形を自力で画面に書かなければならない?
heightが5、widthが8で1マスで、8×8マスでしたorz 後は自力でやってみます。 助かりましたありがとうございました!
そーゆーふーに解釈することも可能だが、引数に文字ってあるわけだし、 rect('*', 3,2) は ** ** ** という黒マス用長方形を描くための一連のデータを返すと考えるのが妥当 empが白マス用長方形 初期値が '*' と 3 と 2 なら ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** という図形になるようなプログラムを作れという課題だろう
そんな感じだと思います。この感じのチェス盤となります。
まだやってたのか…
夜まで用事がありまして、、帰ったら完成させます。皆さんありがとうございます。
14:53 っていう時間を秒に変換するマクロってありませんか? :でパースして14*60 + 53ってやらないとダメですか?
Rubyにマクロなんてあったっけ?
>>835 irb(main):001:0> str = "14:53"
=> "14:53"
irb(main):002:0> if /^(¥d+):(¥d+)$/ =~ str then $1.to_i * 60 + $2.to_i else nil end
=> 893
これではダメなの?十分に短いコードだとと思うけど....
=> 893 偶然とはいえ返り値にフイタ
>>837 なんか僕が書いたコードと全然違いますね
こういう書き方勉強になりました
840 :
デフォルトの名無しさん :2011/11/23(水) 22:57:13.22
文脈を考慮せず14:53だけ見ると14時53分にも見えるな。
えっ違うの? …あ、違うんだ 分と秒の区切り文字も : でいいんだっけ?
842 :
デフォルトの名無しさん :2011/11/23(水) 23:38:00.88
質問者が 秒に変換する と言って、変換式が 14*60+53 だから 分:秒フォーマットなのでしょう。
yum installで入るruby古すぎ rpm作ろうとcheckinstallというので作成してみが、 インストールできるが、アンインストール後に余計なファイルが残る。
>>841 よろしい
だから、 時:分と 分:秒 を字面で見わけることはできない
>>843 まあデフォルトでRuby1.8.2やRuby1.8.5がインストールされる環境もあるということは認識しておいたほうがよ…くても対応なんてできんわwwww
Windowsで日本語のファイル名は1.9系ではまだ扱えないので1.8を使うしかない。 2.0で対応するの?
Unicodeファイル名は1.9で無理なら1.8でも無理だろ 1.9.3ではopenできるんじゃなかったっけ
>>835 これでも出来る。(1.8.7、1.9.2)
require 'time'
s = "14:53"
p Time.parse(s).min * 60 + Time.parse(s).sec
846が馬鹿なだけ
rakeで namespace :foo do task :bar do ... end task :baz do ... end end としたとき、rake -Tで foo:bar foo:baz とでてくるけど、task foo を定義するのはどうしたらいい? ちょうど、ブラウザで/foo/ にアクセスするとデフォルトで /foo/index.html にアクセスするようなかんじ。 task :default を定義したらいいのだと思ったけど、違うみたい。
851 :
846 :2011/11/24(木) 00:39:51.88
意味が分からん 1.9で扱えないと何で1.8? それ以前に1.9で扱えるし
あö.txt あö をopenしてみたけど1.8.7はアウトで1.9.3はOKだったよ
>>851 なんでブログの記事なの?
いや、わりとマジで
>>846 はRubyの実行環境なんて持ってないんだよ言わせんな恥ずかしい
>>824 > pattern1.lines.zip(pattern2.lines).collect{|i| i.collect{|k| k.chomp}.join}.join("\n")
完成したんですがここのとこだけよく分からないのです。どうなってるんですか?
>>857 横レスだけど、
>>824 を(勝手に)折り曲げてみた。これなら読めるかな?
pattern1.lines.zip(
pattern2.lines
).collect { |i|
i.collect { |k| k.chomp }.join
}.join("¥n")
そーゆー物理行的な意味ではないと思う
>>857 irb> "foo \n bar \n baz".lines
=> #<Enumerator: "foo \n bar \n baz":lines>
irb> _.zip("123 \n 456 \n 789".lines) # irb において _ はさっき実行した式の返り値
=> [["foo \n", "123 \n"], [" bar \n", " 456 \n"], [" baz", " 789"]]
irb> _.collect{|i| i.collect{|k| k.chomp } }
=> [["foo ", "123 "], [" bar ", " 456 "], [" baz", " 789"]]
irb> [1, 2, 3].collect{|e| e * 2 }
=> [2, 4, 6]
まだわからなければどこの何がわからないか具体的に書いたほうがいいよ
>>848 require 'time'
Time.parse('14:53') #=> 2011-11-24 14:53:00 +0900
時:分 と認識するようですな
というわけで
(Time.parse('14:53')-Time.parse('00:00')).div(60) #=> 893
>>860 collectの中にcollectがあるのがよく分からないです。あと二つ目のcollectに付くjoinも。
鯖復帰記念ぱぴこ
>>862 まずはcollectの後ろについたjoinについて
これはcollectした結果にさらにjoinを適用するということ
たとえば ["a", "b", "c"].collect{|str| str.upcase }.join は
["A", "B", "C"].join に評価されて、これはさらに "ABC" に評価される
あと二重のcollectだけど、collectするデータが二重の配列(配列の配列)なのと対応してる
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| p inner_array }
["a", "b"]
["x", "y"]
=> [["a", "b"], ["x", "y"]]
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| inner_array.collect{|char| char.upcase }}
=> [["A", "B"], ["X", "Y"]]
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| inner_array.collect{|char| char.upcase }.join }
=> ["AB", "XY"]
irb> [['a', 'b'], ['x', 'y']].collect{|inner_array| inner_array.collect{|char| char.upcase }.join }.join
=> "ABXY"
自分でirbで(できれば値をあれこれ変えながら)試すと理解が速いと思うよ
あと各メソッドについてマニュアル読んでなかったら読む
>>862 pattern1とpattern2をそれぞれ"**\n**\n**", "--\n--\n--"だとすると、
linesすることで["**\n", "**\n", "**"], ["--\n", "--\n", "--"]というものが作れる(実際は配列じゃないけど便宜上)
["**\n", "**\n", "**"].zip(["--\n", "--\n", "--"])で返ってくるのは
[["**\n", "--\n"], ["**\n", "--\n"], ["**", "--"]]という配列の配列。
この大きな配列全体に対してcollect{|i| ... }すると、 i には["**\n", "--\n"]こういう配列が入る。
二回目のcollectや最初のjoinはこの小さい配列に対するもので、"**\n"と"--\n"から改行を取り除いた上でjoinして
"**--"こういう文字列にする。
これを繰り返して全体のcollectが済んだ時点で
["**--", "**--", "**--"]という感じの配列が返ってくるからjoin("\n")で間に改行を挟みながら連結すると
"**--\n**--\n**--"
**--
**--
**--
つまり
"**\n**\n**"
**
**
**
と
"--\n--\n--"
--
--
--
を横に連結したものが返ってくる、って寸法。
866 :
uy :2011/11/26(土) 06:15:11.83
み づ ら い
お前の視認能力か使ってるブラウザがゴミなだけ
なにそのBrainF*ck
ちょっと相談なんだけど、webアプリを作ってるときに、 ブラウザでHTMLページに使うときの「パス」と、ファイルの場所を表す「パス」を、区別して名前をつけたいんだけど、どんな名前にすればいいでしょうか。 たとえば HTTPリクエストで /~user/foo/bar.html というパスが指定されて、 それがファイルシステム上では /home/user/public/foo/bar.html というパスに相当する時、 path1 = '/~user/foo/bar.html' path2 = '/home/user/public/foo/bar.html' としているんですが、性質の違うものなのに両方にpathという名前を使っているので混乱します。 なにか両者を使い分ける、いい名前はないでしょうか。 他の人に聞いたら、virtual path と real path というのはどうかと言われたんですが、これはよく使われる名前でしょうか。
uri_path と system_path なら説明なしでほぼ確実に理解してもらえる 片方だけでも意味が通るし、勘違いも起こらないかと思う あと Ruby あんまし関係ないな
>>870 uri1 = '/~user/foo/bar.html'
path1 = '/home/user/public/foo/bar.html'
が意図を表せていいんじゃないかな
'/~user/foo/bar.html' も、定義上は相対URIであることには間違いないわけだし
873 :
デフォルトの名無しさん :2011/11/26(土) 23:43:41.25
まさか採用するとは思わなかった fsではなにがなんだかわからない 挙げられているうちで最悪のパターン
まあ、初心者スレだからなあ
回答者が Ruby 初心者である可能性を考慮に入れないと
>>872 Ruby では変数名 uri は標準の URI オブジェクトであることが強く期待される(クラス名の downcase)
ただの文字列に単なる uri という変数名をあてがうのは「URI や URN と呼ぶのが正しい」などという主張とは全く関係なく好ましくない
じゃあ URI 文字列をなんて呼ぶのがいいんだという問題が残るんだが
… url でいいんじゃね(弱気
ここで夢のハンガリアン記法が復活
>>876 その理屈で行くと、変数名にpathって付けた時点で
「Pathnameオブジェクトであることが期待される」ってことになって
pathって変数名も好ましくないことになるんじゃないか?
>>875 filesystem path だろう
Apacheがリクエストに含まれるパスを
実際のファイルシステムにマッピングするんだから
>>879 たぶん
>>875 はそういう「fsとは何か」ということについての講釈を聞きたかったのではないと思うぞ
>>881 Webアプリの開発してる人ならfs_pathの近くにurl_pathがあれば
ああfsってファイルシステムのことだなと見当つけられるでしょ?
そういった文脈があれば「なにがなんだかわからない」ような代物ではない
自己擁護のために勝手に条件付けを始めた
>>883 どこが勝手につけた条件?
なんか最近このスレ変にいちゃもんつける人が増えたなあ
かといって役にたつアドバイスをするわけではなく
「Webアプリの開発してる人なら」「近くにあれば」「文脈があれば」だろう そんなん、たとえば変数定義のところを見れば一発だ 適宜内容をデバッグ表示させてもいい しかし、変数名問題というものはそういうものではないはず
若い人は知らないかもしれないが、変数名は6文字以内や8文字以内でなければならないという時代があったのですよ
「わかりやすくて、極力短い」がよろしい
「とにかく短く、わかりやすさは人力でカバー」では20世紀と変わらない
ファイルシステムのパスなら filesystem_path か system_path、いいとこ filepath くらいだ
>>870 のそれこそ文脈で、 fs と接頭詞に略して何も思わない時点でかなりヤバい
fsって略語からfile systemって単語はすぐ連想できるし 逆にfile system以外の単語を思いつかないから個人的には許容範囲だわ
説明的な名前をつけまくると1行がヨコに長くなってしまう問題が…… snake_caseが一般的な時点で不可避ではあるけど……
おそらく「…fsってなーに? なんの略語?」という判断が入ること自体、あんまりよくないんだと思う file_pathを見て「fileってなーに?」と考える人はおそらくいない system_pathを見て「いや安易にsystemと言われましても送信先のクライアントシステムかもしれませんしアプリケーション自体をシステムと呼」とか考えるアスペはまずいない
つーか、
>>870 自身が挙げた real_path が何気に最適な訳な気がする
じゃあ間をとってreal_fs_pathで
filesystemだから全く考えることなしにとにかく自然に略してfs、はperlの文化っぽい気がするっぽい
fsck, reiserFS, NFS, NTFS等々Perl以外でも普通に略すよ
897 :
デフォルトの名無しさん :2011/11/27(日) 18:02:34.59
そもそも fs_path を提示した本人がカッコの中で疑問を呈しているというのに。
870です。
>>882 >Webアプリの開発してる人ならfs_pathの近くにurl_pathがあれば
>ああfsってファイルシステムのことだなと見当つけられるでしょ?
>そういった文脈があれば「なにがなんだかわからない」ような代物ではない
おっしゃる通りです。
「url_path」と「fs_path」が対比されて使われているので、fsだけで十分わかります。
頻繁に登場する名前に「filesystem_path」なんて長すぎて。弊社が使うのはRubyであってJavaじゃないので。
>>891 >>890 は
「fsは思考に一手間入るからダメ」という主張だと思うよ。
でもsystem_pathで思考に一手間入るのはアスペだけ、という話。
俺もsystem_pathあたりが妥当だと思う。
>>900 Rubyに「変数名は短く」なんて習慣はないがね。
m = /(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d) (¥d¥d):(¥d¥d)/.match(str) year = m[1]; mon = m[2]; day = m[3]; hour = m[4]; min = m[5] というのを簡潔に書くには _, year, mon, day, hour, min = m.to_a という方法でいいでしょうか。 もっといい方法があればおしえてください。
require 'time' _, min, hour, day, month, year = Time.parse(m).to_a
ああ、mじゃなくてstrだ require 'time' _, min, hour, day, month, year = Time.parse(str).to_a
>>902 year, month, day, hour, min = m[1..5]
Rubyってアンダースコアをパターンマッチみたいに使えたのか……
え? ダミー変数でしょ、これ
うん、ダミー変数 irb で誤爆する
たしかに言われてみれば、Rubyだと _ は普通の変数として認識されるから、 関数型言語でのタプルのパターンマッチ構文と良く似た書き方になるんだね
>>902 個人的にはあまり使ってないけど
irb> /(?<hour>\d\d):(?<min>\d\d):(?<sec>\d\d)/ =~ '12:44:02'
=> 0
irb> [hour, min, sec]
=> ["12", "44", "02"]
正規表現を =~ の左辺にもってこないとタグの変数に代入されないので注意
捨て変数つきの多重代入がベストだと思う 右辺部分はまあ好きにせえ
Rubyは左辺の変数の数と配列の要素数が違ってもエラーにならないから
>>904 のコードには注意がいる
だったらのように多少文字数が増えてもt.hourなどの名前でアクセスすべきじゃないかな
だったら多少文字数が増えてもt.hourのように名前でアクセスすべきじゃないかと言いたかった スコープに入るのがtだけという利点もある
エラー処理をそういう構造に任せるなとか代入元の戻り値の整合性は別途チェックしろという考えかたもなくもなくもない ただ、多重代入の魔境っぷりは知っておいたほうがいいとは思う
>>910 名前つきキャプチャを使うと
MatchDataがHashっぽくなるよね
m = /(?<hour>\d\d):(?<min>\d\d):(?<sec>\d\d)/.match('12:44:02')
=> #<MatchData "12:44:02" hour:"12" min:"44" sec:"02">
[m[:hour], m[:min], m[:sec]]
=> ["12", "44", "02"]
余談だけど
名前つきキャプチャを使うと通常のグルーピングがキャプチャしなくなるのはダメ仕様だと思う
他の処理系や正規表現ライブラリでは名前付きでも無しでも両方有効で混在できるのに、Rubyだけ異質
917 :
デフォルトの名無しさん :2011/11/28(月) 20:42:07.29
@array[1..-1] とか。
>>917 が妥当
ちなみに「元の配列の1番目から最後まで順に取り出して配列のフリをする指示オブジェクト」を作るだけなので、効率やメモリ消費は基本劣化しない
こんなので新たに大きな配列を作るなんて、とか考える必要はないのでどんどん使え
eRubyでARGV引数を取りたいときはどうすれば良いですか? 例えば、hoge.erbとして <%= 2*ARGV[0].to_i %> のようなファイルを用意し、 $ eruby hoge.erb 3 とすると 6 と表示するような。 環境はCentOS 5.7のeruby 1.0.5 ruby 1.8.5です
921 :
デフォルトの名無しさん :2011/11/28(月) 22:57:48.85
>>920 この記法で返ってくるオブジェクトは元オブジェクトと要素メモリを共有しているので
両者の分消費されるわけではない。巨大な配列の場合も心配しなくてもよろしい。
>>921 見事な通訳っぷりだけどそれはさておき
ary = [1, 2, 3]
ary2 = ary[0..-1]
ary[0] = 10
ary2 #=> [1, 2, 3]
書き換え時にコピーされるってこと?
できたらポインタちょうだい
Array#slice とかの ary_make_shared() の話はけっこう有名 C のソース読んだほうが早いと思う
>>923 サンクス。Cとか読み間違えるからマニュアル等に記述が欲しかったが仕方ない
array.cのrb_array_modify()あたりか
ary = [1,2,3]; ary[0..-2].each{|elem|p elem}みたいに
書き替えずに参照するだけなら元配列のコピーは起こらないって理解でいいかな
>>917 あーそうか-1ってありましたね
ありがとうございます
Ruby内部動作は知らないが、挙動だけを見ると 配列のスライス作ったときにはコピーはおこらず どちらかの配列が変更されたときに初めてコピーされる でも、その共有状態を解除できない a=Array.new(10000000) b=a[1..-1] # スライスを作って共有状態に b=nil #スライスへの参照をなくす(つもり) GC.start #スライスを確実にGCしたい a.push(0) # それでも、実際にコピーが発生してから 元配列を変更 その後、スライスから実配列になったものは、どこからも参照されてないのでGCされる
エンコードについての質問です。 pattern =STDIN.gets.chomp! regexp = Regexp.new(pattern,nil,"e") 実行するとwarning : encoding option is ignored -e とでます。 ShiftJISにしたりしたんだけど実行出来ないです。どうしたらいいすか?
違うけど?
Regexp.new で正規表現を作る人なんて Ruby ではいないからねえ…
Rubyプログラミング基礎講座 広瀬雄二著の正規表現の章のサンプルプログラムであったのですよ、、、
その本は 1.8 が対象じゃない? 1.9 でそのまま動くとは限らないから 1.8 にするか、 リファレンスマニュアルにあたって仕様を確認した方が良いよ。
そうだったのですか、、 他の本借りてみます。初心者にオススメの本あったら教えてください。
ここは冷たいインターネッツですね
ああ間違えた。クックブックじゃなくてレシピブック(ソフトバンクから出てるほう)
これ初心者向けですかー
なにの初心者向けなのかはきちんとしておかないといけない たとえばキーボード打ったことがないとか
なんか if とかで分岐ができて、メソッドっていうのはなんか ドットで繋ぐやつで、 クラスはなんかドットの前にある大文字で始まるやつで、モジュールはわけわかんないからいらない、 というレベルで必要なのはレシピブックだと思う
そうだな、レシピブックやクックブックの類は、なくてもできるけど、あると早い お金払わずにこれに相当する知識とテクニックをネットと自力で勉強することはもろちんできるが、本があると10分の1くらいの時間で済む 下手すりゃ1年かけて独習したものが中途半端に古い不完全で抜けのある知識だけだったりするんだが、 これらの本があるだけでそれを越えるクオリティと量のものを1ヶ月で完全に習得できたりする 先人がRubyに関して10年近くうだうだやってきたことの集大成なので、立ち読みでもいいから素直に読め
ずいぶんと大げさだなw
すみません、
>>919 ですが、何か策はあるでしょうか?
>>940 今年授業でjavaを始めて、最近rubyに手を出し始めました。かなりちんぷんかんぷんなんでrubyでちゃんと勉強しようかと思い本を手にとった次第ですね。
>>944 Ruby1.8.5なんてもう誰も使ってないからフォローできない
eRubyを今さら以下略っていうかC実装で標準添付じゃないから読むのめんどい
erbのように引数をぜんぶファイル名とみなして消費する実装というのは結構あるので、コマンドラインオプションで気を遣っていなければ無理だと思う
>>943 大袈裟ではない
あれらの本は、(脱)初心者のレベルを容易に一定のレベルまで引き上げることができる
だからこそレシピブックやクックブックが望まれてきたんだ(PerlやPythonのようにね)
イヤな言い方だが、Ruby1.8.6黎明期に自力でやっていた人はレシピブックがなかったせいで時間を大損してるんだぞ
今の初心者はロクに苦労も時間もかけずに基本とテクニックを習得してしまってハングリー精神に欠けるとか嫉妬しても許すw
今から学び始めるなら1.9に対応した書籍の方が良いですよね まだ軽く立ち読みしたけどまだあんまり種類が無いみたいで
文字エンコーディング(文字コード対応関係)に関する基礎的な知識が否応なく剥き出しで必要になるけどね1.9 まあ、1.8ではだましだましやってるってだけで早晩ブチ当たる問題なので、避けては通れないものではあるんだけど Rubyの書籍は変なのが売れ残ってるだけだったりするので注意 わからんかったら教えたりスルーしたり煽ったり叩いたりするので聞いてみるといい
>>948 おれはrubyの負の部分であると言えるpack,unpackで苦労したけどな
pack,unpackはPerlで使ってたので苦労は無かったな Pythonとか他のスクリプト言語だとどうやるんだろうか なんか、うまいバイナリの扱い方があるのかな
perl,awk系のスクリプト言語は正規表現だけはよく出来るのがその存在意義だと思うよ
packとunpackこそ、Cライクインターフェースと糖衣構文の2刀で行くべきだった なんでC風で諦めちゃったのかね
>>953 もともとそれらは(そしてRubyも)テキスト処理の為に設計された言語だから、
当たり前といえば当たり前だったりする
>>948 1.8.6が出たころにはレシピブックもうあったよ
うちの初版は2004年発行で1.8.1対応だ
ちなみにその初版はいまだに使えるけど
オライリーのクックブックはまったく使ってない
あの実用度は本家をしのいでる
>>919 > eRubyでARGV引数を取りたいときはどうすれば良いですか?
>
> 例えば、hoge.erbとして
> <%= 2*ARGV[0].to_i %>
> のようなファイルを用意し、
> $ eruby hoge.erb 3
> とすると
> 6
> と表示するような。
erbだと
erb hoge.erb 3
とやったら、「3」というファイルを探しにいってエラーになるな。
erubisだとhoge.erbを「<%= 2*@arg.to_i %>」にして
erubis -c '@arg=3' hoge.erb
とすればいけるね。
引数が複数なら erubis -c '@a=1;@b="X";@c=[true,false]' hoge.erb かな。
テンプレートにちょろっとデータを渡して実験したい場合にはそれなりに便利かな。
gemを大量に入れると(Railsではありがち)、Rubyの起動が目に見えて遅くなるんだけど、 なんか解決策ないですか。 irb起動するのにいちいち2秒〜3秒待たされてしまい、困ってます。 なおirb起動しっぱなしにすればいいというのはなしでお願いします。
1.8を使う
わーいエロ画像いっぱいDLするツールできた
964 :
デフォルトの名無しさん :2011/11/30(水) 20:59:43.19
1.9.3のrequireはかなり速くなってないか?
>>963 よし、おじさんにkwsk 教えてください
966 :
デフォルトの名無しさん :2011/11/30(水) 21:44:32.60
UAをブラウザに見せかけるとか、 人間ぽく見せるためにランダムにリクエスト間隔を空けるとか、 いろいろ工夫する楽しみがある…かも。
968 :
uy :2011/12/01(木) 03:26:05.70
誤爆だろ 誤爆、つまりミスをしても それを伝えないで 「あ」っつってブラウザ閉じてとんずらこくカスがいるのが、このム板
969 :
デフォルトの名無しさん :2011/12/01(木) 09:16:44.61
エロ画像DLツールの話じゃ?
流れを見れば普通の人はそう思うよね
まあ、そんな話されてもだから何って感じではあるけどな
初めてThread使ったのはエロ画像をごっそり落とした時だな
今頃で申し訳ないんだが
>>512 の
require File.expand_path("hoge", Flie.dirname(__FILE__))
と
>>468 の
require File.expand_path("hoge")
って普通に
>>468 で間違って無いと思うんだけど、File.dirname(__FILE__)がカレント(".")以外を
返すときってあるの?
それがカレントに無ければそこを返すだろう
975 :
デフォルトの名無しさん :2011/12/01(木) 19:39:25.03
. のカレントってのは、ファイルから見て、じゃなくてプロセスから見て、だ。
なるほど、ファイルからだと勘違いしてた
977 :
k :2011/12/02(金) 12:34:42.36
すみません、rubyを学んで間もない学生です。エラーを調べもわからないので質問させてください・・。 rake db:migrate と入力しマイグレーションを実行すると、 == AddTestData: migrating ==================================================== -- product() rake aborted! An error has occurred, all later migrations canceled: となって、終了してしまいます。自分は調べ方が下手なので調べ方・対策があればよろしくお願いいたします。
コロンの後が重要なんだけど
エラー内容も書かずに rakeは強制終了! エラー発生、以降のmigrationはキャンセルされました: で何かわかると思ってるのかね。 この程度の英語も読まないならプログラミングなんてやめた方がいい。 調べ方が云々じゃなくて、エラーメッセージを読んですらいないのが丸わかり。
980 :
k :2011/12/02(金) 14:44:03.52
大変失礼しました。 こちらがコロン後です。長いので分けていきます。 undefined method `price_must_be_at_least_a_cent' for #<Product:0x5689048> C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /attribute_methods.rb:260:in `method_missing' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:178:in `send' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:178:in `evaluate_method' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:166:in `call' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:90:in `run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:90:in `each' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:90:in `send' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:90:in `run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_suppo rt/callbacks.rb:277:in `run_callbacks' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /validations.rb:1029:in `valid_without_callbacks?'
981 :
k :2011/12/02(金) 14:44:34.90
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /callbacks.rb:286:in `valid?' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /validations.rb:1008:in `save_without_dirty' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /dirty.rb:79:in `save_without_transactions' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:179:in `send' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:179:in `with_transaction_returning_status' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /connection_adapters/abstract/database_statements.rb:66:in `transaction' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:129:in `transaction' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:138:in `transaction' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:178:in `with_transaction_returning_status' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:146:in `save' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:158:in `rollback_active_record_state!' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /transactions.rb:146:in `save' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /base.rb:693:in `create' ./db/migrate//20111202052032_add_test_data.rb:4:in `up_without_benchmarks' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:280:in `send'
982 :
k :2011/12/02(金) 14:45:09.38
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:280:in `migrate' C:/InstantRails/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:280:in `migrate' (__DELEGATION__):2:in `__send__' (__DELEGATION__):2:in `migrate' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:480:in `migrate' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:556:in `call' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:556:in `ddl_transaction' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:479:in `migrate' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:466:in `each' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:466:in `migrate' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:394:in `up' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record /migration.rb:377:in `migrate' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/tasks/databases.rake :111 C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execu te'
983 :
k :2011/12/02(金) 14:46:04.51
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execu te' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invok e_with_call_chain' C:/InstantRails/ruby /lib/ruby/1.8/monitor.rb:242:in `synchronize' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invok e_with_call_chain' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invok e' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invo ke_task' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_ level' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each ' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_ level' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `stan dard_exception_handling' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_ level' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
984 :
k :2011/12/02(金) 14:47:17.20
C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `stan dard_exception_handling' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run' C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31 C:/InstantRails/ruby/bin/rake:19:in `load' C:/InstantRails/ruby/bin/rake:19 以上です。よろしくお願いいたします。
こちらこそヨロシクお願いいたします。
>>984 はい、ご苦労様、それじゃ次は
>>5 を読んでね。
これでこのスレでの回答はおしまい。
次のちんこスレはどこだ?
次 ス レ の 季 節 で す よ
989 :
k :2011/12/02(金) 15:05:59.14
>>984 さん
ありがとうございます。スレ違いでしたね。失礼しました;
拝見してきます!
相澤, 20, 169, 70 竹内, 28, 173, 69 … みたいなテキストファイルがあってこれを配列に格納してクラスで定義したいのですが、インスタンスの初期化はどこでしたらいいのですか? new_array =[] while input_line =gets new_array <<Person.new(input_line) end 格納はこんな感じになると思うのですが、初期化するときの引数はinput_lineで大丈夫ですか?
それだとカンマ区切りテキストでしかPersonを生成できないので name, age, height, weight = line.chomp.split(/,\s+/) new_array << Person.new(name, age, height, weight)みたいにする だれか次すれを
ああ、line.chomp.split(/,\s*/).map{|e|e.to_i} で スレ立ていってきます
>>991 テキストファイルは実際はもっとデータがあるので格納の際は一行丸ごと読み込みたいのですが、、
格納のやり方は上記のものとして、初期化はどうやったらいいですか?要素番号を用いる感じでいいのでしょうか。
あれ、むりか
>>994 よくわからないけど、こんな感じ?
class Person
def initialize(name, age, height, weight); ... ; end
end
ary = ['相澤', 20, 169, 70] # getsしたlineを加工したもの
Person.new(*ary)
,--――--、 /,""^" ̄゛゛、ヽ ',l -‐' ー- "、| 〔::::::〕‐〔:::::::〕‐b) __| ,(__)、 |"__ いいかお前ら、ちゃんと(次スレの)コンセンサスを得ろよ / _ ヽ、_=__/ _ \ じゃないと俺は何もしないからな ∧_/ / lVヽ ̄/V/ / \/ヽ ヽ' / / l/ / /
梅
梅
おつかれちゃん
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。