Ruby 初心者スレッド Part 33
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/12/05(土) 14:21:25★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
(理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2009/12/05(土) 14:22:09Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
・「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
・「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245/
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003デフォルトの名無しさん
2009/12/05(土) 14:22:49・Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004デフォルトの名無しさん
2009/12/05(土) 14:24:09・Rubyについて Part 38
http://pc12.2ch.net/test/read.cgi/tech/1257079004/
アンチスレ
・Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
Railsスレ
・【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
0005デフォルトの名無しさん
2009/12/05(土) 14:24:50Ruby 初心者スレッド Part 32
http://pc12.2ch.net/test/read.cgi/tech/1256332692/
Ruby 初心者スレッド Part 31
http://pc12.2ch.net/test/read.cgi/tech/1253176267/
0006デフォルトの名無しさん
2009/12/05(土) 14:25:32・Ruby 1.8.5
レンタルサーバ等にいまだに残ってる非安定な古いバージョン
1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい
・Ruby 1.8.6
過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ
・Ruby 1.8.7
1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい
・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に
・Ruby 1.9.1
満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
0007デフォルトの名無しさん
2009/12/05(土) 15:33:07確かにこれでもいいが、メソッドチェーンできねえからな・・・
p {"a" => 1, "b" => 2, "c" => 3}.map{|x|x[1]}
SyntaxError: compile error
>999 名前:デフォルトの名無しさん[sage] 投稿日:2009/12/05(土) 14:16:08
>>>989
>中カッコを外すとかは?
>
>p "a" => 1, "b" => 2, "c" => 3
0008デフォルトの名無しさん
2009/12/05(土) 15:46:49・Rubygem 0.x
極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい
Rubygem は 1.0 も 1.1 も 1.2 も肝心なとこにバグ持ちなので極力 1.3 などの最新を使うこと
0009デフォルトの名無しさん
2009/12/05(土) 15:51:54Ubuntu 9.xxでもaptで入れるとbinにパス通ってなかったり、どうしてこうなった?なことになってる
謎過ぎる。
0010デフォルトの名無しさん
2009/12/05(土) 16:02:10http://pkg-ruby-extras.alioth.debian.org/index.html
このへん? よく読んでないけど。
0011デフォルトの名無しさん
2009/12/05(土) 17:32:12b = 80.20
print a - b, "\n" ←こうやると誤差がでますが
printf("%.2f\n", a - b) ←修正はこれでいいですか?もっといい方法あります?
0012デフォルトの名無しさん
2009/12/05(土) 17:44:4182.3
irb> b = 80.20
80.2
irb> p a-b
2.09999999999999
irb> require 'bigdecimal'
irb> a = BigDecimal.new('82.30')
irb> b = BigDecimal.new('80.20')
irb> puts a-b
0.21E1
nil
irb> puts (a-b).to_f
2.1
0013デフォルトの名無しさん
2009/12/05(土) 18:17:21なるほど。BigDecimalですか。
そっちの方が推奨されるやり方なんでしょうか?
例えば以下の様な方法だと何か問題はありますか?
a = 82.30
b = 80.20
c = nil
c = sprintf("%.2f", a - b).to_f
0014デフォルトの名無しさん
2009/12/05(土) 19:00:05それで問題があるかどうかはその数値の使われ方を知っている君が知ってるはず
0015デフォルトの名無しさん
2009/12/05(土) 20:02:12という事は単純な桁数指定と切り上げ処理に限っていえば
この方法でも問題ないという事ですね?
0016デフォルトの名無しさん
2009/12/06(日) 01:38:06character << {alph => "a", hiragana => "あ"}
上記のようなコードを書いた後に、katakana => "ア" を、
配列 character の中のハッシュの末尾に追加するには、どうすればよいでしょう
character[[alph => "a", kana => "あ", ]]
^^^^^^^^^^^^^^^
ここに katakana => "ア" を追加したい。
0017デフォルトの名無しさん
2009/12/06(日) 01:46:15alphaとかhiraganaというのはローカル変数なのか、
シンボルの記述ミスなのか
# あまり本質的ではないけど一応確認。
character[-1].update(katakana => 'ア')
character[-1]で配列の最後の要素にアクセスできる。
返ってくるのは該当要素それ自体(コピーではなく)
これに破壊的メソッドを作用させればよい。
これ、ハッシュの「最後」に追加されるかどうかはバージョンによる。
MRIの1.9ではキーの追加順になるけど、ハッシュの本義に照らせば
どこに追加されるかは仮定できない。
0018デフォルトの名無しさん
2009/12/06(日) 01:53:27> alphaとかhiraganaというのはローカル変数なのか、
> シンボルの記述ミスなのか
記述ミスです。。。
ありがとうございます!できました。
0019デフォルトの名無しさん
2009/12/06(日) 02:19:040020デフォルトの名無しさん
2009/12/06(日) 08:05:030021デフォルトの名無しさん
2009/12/06(日) 08:12:15それがなくなることもない
0022デフォルトの名無しさん
2009/12/06(日) 14:05:43>> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]"
>> Benchmark.realtime{Array.new(1_000_000).inject(0){|r,|r+0}}
=> 1.62985396385193
>> Benchmark.realtime{sum=0; 1_000_000.times{sum+=0}}
=> 0.377360105514526
0023デフォルトの名無しさん
2009/12/06(日) 16:11:360024デフォルトの名無しさん
2009/12/06(日) 18:27:10真理だな
0025デフォルトの名無しさん
2009/12/06(日) 18:31:490026デフォルトの名無しさん
2009/12/06(日) 19:42:32injectは遅いし分かりにくいので、使わずに済むなら使わない方がいいと思う。
1.9にしたらけっこう速くなるけど。
0027デフォルトの名無しさん
2009/12/06(日) 21:53:15なれれば、すぐ読めるよ。
injectは式一個でかけるし、メソッドチェーンも作れるってのがいいんじゃないかな。
0028デフォルトの名無しさん
2009/12/06(日) 22:50:01injectは遅いけど、比較のしかたが違ってるんじゃ?
injectを使うってことは配列とかをイテレートしたいってことだろうから
require 'benchmark'
hoge = Array.new(1_000_000)
a = Benchmark.realtime{sum = hoge.inject(0){|r,e|r+0}}
b = Benchmark.realtime{sum=0;hoge.each{|e|sum+=0}}
print "#{a} / #{b} = #{'%1.5f'%[a/b]}"
くらいが比較なんじゃないだろうか
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mingw32]
2.03125 / 0.21875 = 9.28571
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
0.15625 / 0.078125 = 2.00000
1.8だと9倍おそいけど 1.9だと2倍のコスト
しかも1.9のinjectの方が 1.8のeachより速い
0029デフォルトの名無しさん
2009/12/06(日) 22:51:50ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mingw32]
34.421875 / 1.109375 = 31.02817
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mingw32]
0.640625 / 0.359375 = 1.78261
1.8のinjectがすごく遅くなった
0030デフォルトの名無しさん
2009/12/06(日) 22:58:04p が引数をそっくり返り値にするので 前スレの
[1,2,3,4,5].inject(0) {|result, item| p result += item }
はそのままで動く
puts とかprintfみたいに値を返さないメソッド使いたい場合
破壊的変更が出来るのなら each_with_object も使える
[1,2,3,4,5].each_with_object('') {|item,result| printf("%10s\n",result << item.to_s) }
injectと違い最後にresultを返り値に置かなくてもいい
でも数値だと破壊的変更が出来ないので普通にinjectを使うしかないような
0031デフォルトの名無しさん
2009/12/06(日) 23:02:500032デフォルトの名無しさん
2009/12/07(月) 00:00:35二次元配列を生成する方法にこんなものを知ったんですが
もっと短くかけないんでしょうか?
0033デフォルトの名無しさん
2009/12/07(月) 00:04:21つまり、ネストした配列で代用するしかない
map でもいいんじゃね
0034デフォルトの名無しさん
2009/12/07(月) 01:29:14hs = (0..5).map{|n|(0..5).map{|m|0}}
hs = (0..5).map{(0..5).map{0}}
0035デフォルトの名無しさん
2009/12/07(月) 02:33:01>> a1=Array.new(2)
=> [nil, nil]
>> a1.map{|e|e.object_id}
=> [4, 4]
>> a1[0]=:test
=> :test
>> a1
=> [:test, nil]
>> a2=Array.new(2,Array.new(2))
=> [[nil, nil], [nil, nil]]
>> a2.map{|e|e.map{e.object_id}}
=> [[2983450, 2983450], [2983450, 2983450]]
>> a2[0][0]=:test
=> :test
>> a2.map{|e|e.map{e.object_id}}
=> [[2983450, 2983450], [2983450, 2983450]]
>> a2
=> [[:test, nil], [:test, nil]]
0036デフォルトの名無しさん
2009/12/07(月) 02:49:23そうですかぁ
残念です
0037デフォルトの名無しさん
2009/12/07(月) 02:53:32× a2.map{|e|e.map{e.object_id}}
○ a2.map{|e| e.map{|e| e.object_id}}
0038デフォルトの名無しさん
2009/12/07(月) 03:01:590039デフォルトの名無しさん
2009/12/07(月) 03:52:50if s =~ /ccc:(\S+)/
t = $1
s.gsub!(/ccc:(\S+)/, "") # この二度手間な記述をもっと簡潔に書くやり方はないですか?
end
p s # "aaa bbb eee"
p t # "ddd"
0040デフォルトの名無しさん
2009/12/07(月) 05:06:06s = "aaa bbb ccc:ddd eee"
t = s.gsub!(/ccc:(\S+)/, '') ? $~[1] : ''
0041デフォルトの名無しさん
2009/12/07(月) 05:10:30これくらいしか思い付かん
s = "aaa bbb ccc:ddd eee"
t = s[/ccc:(\S+)/,1]
s.gsub!(/ccc:(\S+)/,"")
又は
s,t = "aaa bbb ccc:ddd eee"
s.gsub!(/ccc:(\S+)/) { t = $1 ; "" }
もしくは
s = "aaa bbb ccc:ddd eee"
s,t = $`+$',$1 if s =~ /ccc:(\S+)/
0042デフォルトの名無しさん
2009/12/07(月) 05:12:15ここで $1 ではなく $~[1] を使う理由はある?
0043デフォルトの名無しさん
2009/12/07(月) 10:18:05簡潔でわかりやすくていいじゃん
0044デフォルトの名無しさん
2009/12/07(月) 11:08:350045デフォルトの名無しさん
2009/12/07(月) 11:16:10そういう考え方もある
内部変数名と同じ名前のpublicなメソッドを外部提供する理由は本来無い
ユーザーに提供されるべきは、もっと一段上の名称&機能なメソッドであるべき
attr_writer :username, :password
ではなく
def user_info(h={})
@username, @password = h[:username], h[:password]
end
とかのほうがいいんじゃね、みたいな考え
オープンクラスだし堅いこと言うなJava使えJavaって感じではあるが
0046デフォルトの名無しさん
2009/12/07(月) 16:30:36gsub!を使うということは複数回の置換が想定されるのか?
tの値は置換が起こらなければ保存しておきたいのか?
置換でも$1は得られるので
複数回の置換がおこなわれるうちの最後の$1が取れればいいだけなら
>>40 でいい
置換が起こらなければtを変更したくないのならば
t = $1 if s.gsub!(/ccc:(\S+)/, '')
とか、置換が起こらなければt=nilになってもいいのなら
t = s.gsub!(/ccc:(\S+)/, '') && $1
複数回置換のうちの最初の $1 が得たいのなら
置換が起こらなければt=nilになりますが >>41 の二番目をちょっと変えた
t = nil
s.gsub!(/ccc:(\S+)/) { t ||= $1 ; "" }
とか
t = nil
t ||= $1 while s.sub!(/ccc:(\S+)/,'') #gsub!と違って置換した結果をさらに置換していくので結果が変わることもある
とかですかね
でも、巨大文字列内の大量置換を一気にやり、なおかつ最初の$1を得たいのなら>>39が一番速いかな
>>41の最初のでもいいけど tが変更されるし>>39の方がわかりやすい
0047デフォルトの名無しさん
2009/12/07(月) 19:14:47今年はじめのこんな記事を見つけたんだけど、仕様書草案ってもうどこかで見られる?
0048デフォルトの名無しさん
2009/12/07(月) 19:19:460049デフォルトの名無しさん
2009/12/07(月) 19:31:48Rubyについて Part 38
http://pc12.2ch.net/test/read.cgi/tech/1257079004/
261 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/12/01(火) 19:36:45
http://ruby-std.netlab.jp/
0050デフォルトの名無しさん
2009/12/07(月) 19:39:590051デフォルトの名無しさん
2009/12/07(月) 21:34:59場合による、という結論かもしれませんが
みなさんは何を使ってますか?
0052デフォルトの名無しさん
2009/12/07(月) 21:45:45自分で使ってテストの方向性に合うものを選択するといい
テストフレームワークを1種類しか使えない、という人は少ない
よーわからんがテストってあると便利そうじゃね、というのなら RSpec から始めるといいんじゃね
0053デフォルトの名無しさん
2009/12/07(月) 22:19:44標準添付のtest/unitがいいんじゃね
0054デフォルトの名無しさん
2009/12/07(月) 22:34:530055デフォルトの名無しさん
2009/12/07(月) 22:44:51アドバイスありがとうございます
そうですね、もう少し調べたりいろいろ使ってみて決めたいと思います
0056デフォルトの名無しさん
2009/12/07(月) 22:47:08・ ファイル保存を含んだメソッドを実行
・ 例外が起こらないことをテスト
・ ファイルの中身が期待通りであることをテスト
・ 書き出し先ファイルがあれば削除
書き出すファイルを削除できないという場合は知らん
「きっと保存されるはず」みたいなテストするしかなくね
0057デフォルトの名無しさん
2009/12/08(火) 03:20:320058デフォルトの名無しさん
2009/12/08(火) 11:45:06一般的に、FTPではLSコマンドの結果を解釈するしかないのでしょうか?
(net/ftpを利用してます)
0059デフォルトの名無しさん
2009/12/08(火) 11:55:440060デフォルトの名無しさん
2009/12/08(火) 13:17:10一般には自力で解析するしかない。
MDTMというコマンドもあるがすべてのftpサーバが実装しているわけではない。
0061デフォルトの名無しさん
2009/12/08(火) 14:02:01class Publisher
def initialize(p)
@text, @from, @to, @path = p[:text], p[:from], p[:to], p[:path]
end
def publish
output = replace(@text, @from, @to)
save(output, @path)
end
def replace(text, from, to); text.gsub(/#{from}/){to}; end
def save(str, path); File.open(path, 'wb'){|f| f.print(str)}; end
end
# Publisher.new(:text => 'ruby大好き!', :from => 'ruby', :to => 'オブジェクト指向スクリプト言語Ruby',
# :path=> 'ruby_love.txt').publish #=> "オブジェクト指向スクリプト言語Ruby大好き!"
これの Publisher#save をテストしたいとかそんなの?
0062デフォルトの名無しさん
2009/12/08(火) 14:29:56こう囁く
「なー、そのsaveするときの文字列がクラス本体にpとか追記せずに画面に表示できたら便利だと思わね?」
そしてこうする
class Publisher
def initialize(p)
@text, @from, @to, @path = p[:text], p[:from], p[:to], p[:path]
end
def publish
output = replace(@text, @from, @to)
save(io, output)
end
def io
case @path
when IO, File then @path
when "$stdout", nil then $stdout
when "$stderr" then $stderr
else File.open(@path, 'wb')
end
end
def replace(text, from, to); text.gsub(/#{from}/){to}; end
def save(io, str); io.print(str); io.close if io.kind_of?(File); end
end
Publisher.new(:text => 'ruby大好き!', :from => 'ruby', :to => 'オブジェクト指向スクリプト言語Ruby', :path=> $stdout).publish
これなら Publisher#save に StringIO を渡せばテストできるはず
保存時ファイル操作のエラーのときに独自処理したい場合はこれでは駄目だけど
0063デフォルトの名無しさん
2009/12/08(火) 16:17:20いまいちわからなかったのでここで質問してみます。
JRubyはコーディングの仕方が、Rubyと同じなだけであり、
それ以外の部分は全く別なものという解釈でいいのかな?
根本は全く違うものではあるが、コードレベルでは
同じ内容で動くものなので、移植する場合は、
コードのコピペでおk・・・かな?
0064デフォルトの名無しさん
2009/12/08(火) 17:29:49ありがとうございました
0065デフォルトの名無しさん
2009/12/08(火) 19:03:00普通のRubyはCで書いてある
Cで書いてあるので拡張ライブラリはCで作るとよく動く
現在のCのバイナリはだいたい同じように動作することが期待できるのでRubyスクリプトを一度書けばどこでも動く
JRubyはJavaで書いてあるというかJavaで動くというかJava仮想マシンJVM上で動作する
Javaで書いてあるので拡張ライブラリはJavaで作ると普通に動く
おまけにJavaプログラムの一部として埋め込むことも実行することもJavaのライブラリを呼ぶこともできる
通常のRuby(Cで書かれているので区別のためにCRubyと呼ぶ)と同じように動作するように作ってあるものの
たまーに動作が違う部分が混じってることもないわけではないんだが
いちいちスクリプトレベルで対処するのも面倒だしそれこそ煩雑なので無視
本質的にはJVMのぶんだけJRubyのほうが遅い
ただ、JVMを常に起動してる場合は遜色ないか、JRubyのほうが処理が速いこともある
0066デフォルトの名無しさん
2009/12/09(水) 06:11:28,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/ まピョーん☆ IPA Rubyをこれからもよろしく
i、 \___/ _/
\ ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||
0067デフォルトの名無しさん
2009/12/09(水) 10:43:59ttp://sourceforge.jp/magazine/09/12/08/1011230
と思ったがインストーラつきを公開してる人はまだいないのね
0068デフォルトの名無しさん
2009/12/09(水) 10:47:19どうせチェックにしか使ってないし、自分だけ「みんなと違って最新」だと意味ないし
0069デフォルトの名無しさん
2009/12/09(水) 11:01:47安心しろ
1.9.1を普段使ってる奴は普通にアップグレードするし、
1.9.1を自分のスクリプト用のチェックにしか使ってない奴は
「この人のスクリプト俺の1.9.1-p0(しかもmswin32)だと動かないんすけどー」とか言ってきたりはしない
とっととアップグレードすれ
0070デフォルトの名無しさん
2009/12/09(水) 11:14:160071デフォルトの名無しさん
2009/12/09(水) 11:19:29「1.9.1は最新版でしかチェックしてません」と公言するのをお勧め
そうしないといつまでたってもだらだら残るぞ
自分のサイトに最新版へのリンクでも張っとけ
0072デフォルトの名無しさん
2009/12/09(水) 11:25:34make: *** ターゲット `uninstall' を make するルールがありません. 中止.
ぬう
てか前回のconfigureにどんなオプションつけたか忘れたしどこにインストールされたか調べるのめどい
0073デフォルトの名無しさん
2009/12/09(水) 11:45:580074デフォルトの名無しさん
2009/12/09(水) 11:54:230075デフォルトの名無しさん
2009/12/09(水) 12:12:550076デフォルトの名無しさん
2009/12/09(水) 12:35:33スレ違い。 このへんで聞け。
http://pc12.2ch.net/test/read.cgi/tech/1193554741/
0077デフォルトの名無しさん
2009/12/09(水) 12:37:03http://pc12.2ch.net/test/read.cgi/tech/1224696505/
0078デフォルトの名無しさん
2009/12/09(水) 12:44:01Hashを要素にしたArrayって英語でなんて言うんだろうね
よく使われるんだから呼び名がありそうだけど
0079デフォルトの名無しさん
2009/12/09(水) 12:45:27Hashを要素にしたArrayって日本語でなんて言うんだろうね
よく使われるんだから呼び名がありそうだけど
0080デフォルトの名無しさん
2009/12/09(水) 12:55:43Hashed Array
0081デフォルトの名無しさん
2009/12/09(水) 13:25:14Rubyの絵本で勉強を始めましたところ
「配列要素の代入と参照」の項のサンプルコードで躓きました。
n cats = [] = 1
cats[0] = "Kuro"
cats[1] = "Tama"
cats[2] = "Mike"
cats[3] = "Tora"
puts cats[n]
cats[0] = "Shiro"
このサンプルの1行目で以下のようなエラーが出てしまいます
hello.rb:1: syntax error
n cats = [] = 1
^
ググりまして「syntax error」が文法だということは分かりましたが
文法はまだ「文字列表示」と「変数」と「文字列」しか学習出来ていません
本の通りに入力しただけで、この1行目について本には一切説明がないので
どのように文法が違うのかも分からない状態です
この1行目がどのような意味なのか教えていただけないでしょうか
よろしくお願いいたします
環境
CentOS 5.3
ruby 1.8.5 (2006-08-25) [x86_64-linux]
008281
2009/12/09(水) 13:28:11>^
スペースが省略されて「^」の位置がずれてしまいました
「^」は=と1の間にあるスペース部分を指しています
0083デフォルトの名無しさん
2009/12/09(水) 13:31:59売れてないのか何なのか正誤表にはとくに載ってない
おそらくこれが正しい
n = 1
cats = []
cats[0] = "Kuro"
cats[1] = "Tama"
cats[2] = "Mike"
cats[3] = "Tora"
puts cats[n]
cats[0] = "Shiro"
putsでは cats[1] の Tama が表示されるはず
0084デフォルトの名無しさん
2009/12/09(水) 13:38:25メソッドの中から、そのメソッドを呼び出しているメソッドの名前を知りたいのですが、
Kernel#caller以外の方法はありますか?
現在、caller が返す配列の中身に大してパターンマッチングを行って
メソッド名を切り出しているのですが、もっとよい方法がありそうな気がしまして
0085デフォルトの名無しさん
2009/12/09(水) 13:42:44せっかくのRubyなんだからもっとコレクションとしての扱い方から見せたほうがいいと思うなあ
cats = []
cats << "Kuro"
cats << "Tama"
cats << "Mike"
cats << "Tora"
p cats
puts cats[1]
cats[1] = "Shiro"
p cats
こっちのほうがきっと驚いてもらえるぞ
「配列ってなんかざくざく入るんだね!」みたいな
0087デフォルトの名無しさん
2009/12/09(水) 13:58:35うそをいうな。
0088デフォルトの名無しさん
2009/12/09(水) 14:02:07では真実を
0089デフォルトの名無しさん
2009/12/09(水) 14:20:000090デフォルトの名無しさん
2009/12/09(水) 14:20:080091デフォルトの名無しさん
2009/12/09(水) 14:57:300092デフォルトの名無しさん
2009/12/09(水) 14:59:57>>84
それが普通の手段
0093デフォルトの名無しさん
2009/12/09(水) 15:03:041.8.7以降を使ってるなら、__method__で。
009493
2009/12/09(水) 15:04:07呼び出し元を知るには、当然callerですね。
0095デフォルトの名無しさん
2009/12/10(木) 05:12:130096デフォルトの名無しさん
2009/12/10(木) 08:41:52「AはBクラスのインスタンスである」ってのは A === B って書きますが、「AはBクラスの
インスタンスでない」ってのはどう書けばいいでしょうか?
0097デフォルトの名無しさん
2009/12/10(木) 09:16:330098デフォルトの名無しさん
2009/12/10(木) 09:20:24いいえ
a.kind_of?(B)
とでも書いてください
特定クラスのインスタンスでないということをチェックしたい場合は
unless a.kind_of?(B)
と書くか、または
if !a.kind_of?(B)
と書きます
0099デフォルトの名無しさん
2009/12/10(木) 09:22:57A === B というのはA(レシーバ)の持つ===というメソッドに引数としてBを渡すということ(A.===(B)と同じ)
メソッド===はレシーバのクラスによって意味が違う
ttp://www.ruby-lang.org/ja/man/html/Object.html#self.3d.3d.3d
Classクラス(の親クラスであるModuleクラス)の===メソッドは以下の意味
ttp://www.ruby-lang.org/ja/man/html/Module.html#self.20.3d.3d.3d.20obj
だから「AはBクラスのインスタンスである」を書くとするならBのメソッドなので B === A としなければならない
目的のはinstance_of?の否定かkind_of?の否定か
ttp://www.ruby-lang.org/ja/man/html/Object.html#instance_of.3f
0100デフォルトの名無しさん
2009/12/10(木) 09:37:35初心者に instance_of? を勧めるのは正直あまりお勧めしない
irb> p 12.instance_of?(Integer)
false
irb> p 12.instance_of?(Fixnum)
true
irb> p 10000000000.instance_of?(Fixnum)
false
irb> p 10000000000.instance_of?(Bignum)
true
irb> require 'uri'
irb> p URI.parse("http://example.com/").instance_of?(URI)
false
irb> p URI.parse("http://example.com/").instance_of?(URI::HTTP)
true
間違ってないけどー
動作合ってるけどー
でもー
010196
2009/12/10(木) 09:50:450102デフォルトの名無しさん
2009/12/10(木) 09:52:570103デフォルトの名無しさん
2009/12/10(木) 09:53:39いちいちスレあげんなカス!
0104デフォルトの名無しさん
2009/12/10(木) 09:57:37分かりやすい解説ありがとうございました。
イメージがつきました。
0105デフォルトの名無しさん
2009/12/10(木) 14:00:10うるせーバカ
0106デフォルトの名無しさん
2009/12/10(木) 16:30:19俺は履歴とかブックマークからスレッドにたどり着いているので、板一覧とか
見ていないし、スレッドの位置も特に気にしていない。
そもそも、こういう掲示板のage/sageって自由であるべきで
他人が強制するものではないと思う。
0107デフォルトの名無しさん
2009/12/10(木) 19:27:14下記のように書いたのですが、
もうちょっといい書き方ないもんでしょうか?
[{}, {:class => "hoge"}].each do |a|
a[:class] = (a[:class] ? a[:class] + " ": "") + "button" #←ここをなんとかしたい
p a
end
0108デフォルトの名無しさん
2009/12/10(木) 19:48:10if a[:class]
a[:class] += ": button"
else
a[:class] = "button"
end
ネタレス
a[:class] = [a[:class], "button"].compact.join(": ")
0109デフォルトの名無しさん
2009/12/10(木) 21:16:510110デフォルトの名無しさん
2009/12/10(木) 21:19:230111デフォルトの名無しさん
2009/12/10(木) 21:27:35年末でいつもの人は忙しいのかw
0112デフォルトの名無しさん
2009/12/10(木) 21:53:530113デフォルトの名無しさん
2009/12/10(木) 23:00:34a.zip(b)
とするのは対称でなくて見た目が悪いと思うのですが、どう思いますか?
0114デフォルトの名無しさん
2009/12/10(木) 23:03:000115デフォルトの名無しさん
2009/12/10(木) 23:03:18まあ気になるならArrayクラスのクラスメソッドにでもしてしまうとよろし
Array.zip(a, b) みたいなのなら問題あんめえ
0116デフォルトの名無しさん
2009/12/10(木) 23:04:58それいいね。それなら、3項間以上でもすっきりかけるね。
0117デフォルトの名無しさん
2009/12/10(木) 23:05:20みたいな形だとどう?
0118デフォルトの名無しさん
2009/12/10(木) 23:05:420119デフォルトの名無しさん
2009/12/10(木) 23:08:22Enumerator.zip(a,b)
なんか変か?
0120デフォルトの名無しさん
2009/12/10(木) 23:34:04[{}, {:class => "hoge"}].each do |a|
a[:class] &&= a[:class]+" button"
a[:class] ||= "button"
p a
end
[{}, {:class => "hoge"}].each do |a|
begin
a[:class] += " button"
rescue
a[:class] = "button"
end
p a
end
def space_add h,s
return nil if h.nil?
h.replace( h+" "+s )
end
[{}, {:class => "hoge"}].each do |a|
space_add(a[:class],"buttom") || a[:class] = "button"
p a
end
0121デフォルトの名無しさん
2009/12/10(木) 23:53:39ですが、新しいメソッド付加するほどでもないと思っていたら困ったことに・・・
ちなみに本当にほしいものは、長いほうに合わせて
[[3, 1], [4, 2], [5, 2], [6, 2]]
です。メソッド追加しないと無理ですかね?
################################
irb(main):005:0> a = [1,2]
=> [1, 2]
irb(main):006:0> b = [3,4,5,6]
=> [3, 4, 5, 6]
irb(main):007:0> a.zip(b)
=> [[1, 3], [2, 4]]
irb(main):008:0> b.zip(a)
=> [[3, 1], [4, 2], [5, nil], [6, nil]]
0122デフォルトの名無しさん
2009/12/11(金) 00:02:14しかも欲しいものは配列じゃなくてEnumeratorです。
> zip(a,b).each{|e| p e}
[1,3]
[2,4]
[2,5]
[2,6]
みたいに。
0123デフォルトの名無しさん
2009/12/11(金) 00:08:32これをやってくれるRubyのライブラリはありますか。
ついでにJavaScriptのライブラリもあるとうれしいです。
0124デフォルトの名無しさん
2009/12/11(金) 00:35:15(Time.now.to_i - time.to_i) を適当に加工したらできるし。
0125デフォルトの名無しさん
2009/12/11(金) 00:45:020126デフォルトの名無しさん
2009/12/11(金) 01:57:30>distance_of_time_in_words
Thank you very much!
>>124
F***!
0127デフォルトの名無しさん
2009/12/11(金) 06:25:360128デフォルトの名無しさん
2009/12/11(金) 07:49:580129デフォルトの名無しさん
2009/12/11(金) 08:25:43Railsならそう言えよ。
0130デフォルトの名無しさん
2009/12/11(金) 12:04:28RailsのActionPackのActionViewっぽいね。これだけ使えないのかな
0131デフォルトの名無しさん
2009/12/11(金) 12:27:450132デフォルトの名無しさん
2009/12/11(金) 13:40:27require 'active_support'
require 'action_view/helpers/date_helper'
include ActionView::Helpers::DateHelper
あー、あとI18n関係の設定がいるかな。以外と面倒かも。
0133デフォルトの名無しさん
2009/12/11(金) 13:57:40たった一つの処理のために本質でないファイルをウンコのごとく読まなきゃならんし割に合わん
0134デフォルトの名無しさん
2009/12/11(金) 14:46:29「ウンコのごとく読む」っていう比喩がわかんない。
どんな風に読むことを「ウンコのごとく」って言うの?
0135デフォルトの名無しさん
2009/12/11(金) 17:58:38Railsだと分かっていたら答えられたとでもいうのかよwwww
0136デフォルトの名無しさん
2009/12/11(金) 18:23:130137デフォルトの名無しさん
2009/12/11(金) 19:21:02,/ ノ ヽ ~\
/ ノ Ruby ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/ 楽しいプログラミング言語はIPA Rubyだけ
i、 \___/ _/
\ ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||
0138デフォルトの名無しさん
2009/12/11(金) 21:48:40method_defined?のモジュール版みたいなのを探しているのですが・・・
0139デフォルトの名無しさん
2009/12/11(金) 21:57:29require 'net/http'
Object.const_defined?(:Net) #=> true
Net.const_defined?(:HTTP) #=> true
0140デフォルトの名無しさん
2009/12/12(土) 23:46:17X=[1,2,3]
def f X[1]=4 end
大文字(const配列?)のくせにこれは書き換え成功する。
x = 1
def g x=2 end
これはスコープ内で局所変数と解釈されて、書き換えられない。
Y=1
def h Y=2 end
これは定数書き換えが不正と解釈されて通らない。
h()は仕方ないとしても、g()と同じ動作は欲しいので、どう実現すればいいか教えてください。
ポインタっぽいのがあると一番いいのですが・・・。
0141デフォルトの名無しさん
2009/12/12(土) 23:49:33>X=[1,2,3]
>def f X[1]=4 end
>大文字(const配列?)のくせにこれは書き換え成功する。
前後にX.object_idを表示してみると、「同じオブジェクト」を
指したままであることが確認できるはず。
配列のような内部に状態を持つオブジェクトの状態を変更することは
定数という観点でいうと「書き換え」ではない。
>x = 1
>def g x=2 end
>これはスコープ内で局所変数と解釈されて、書き換えられない。
>h()は仕方ないとしても、g()と同じ動作は欲しいので、どう実現すればいいか教えてください。
>ポインタっぽいのがあると一番いいのですが・・・。
オブジェクトと変数の区別を理解してから出直しておいで。
0142デフォルトの名無しさん
2009/12/13(日) 00:07:05オブジェクトと変数の区別があるのは分かりますが、
X = Integer(1)
と
Y = [1,2,3]
はどちらも
定数=「オブジェクトのインスタンス」
に見えるのですが。
0143デフォルトの名無しさん
2009/12/13(日) 00:12:11=> [0, 1, 2]
irb(main):002:0> CONS = ["A", "B", "C"]
(irb):2: warning: already initialized constant CONS
=> ["A", "B", "C"]
0144デフォルトの名無しさん
2009/12/13(日) 00:12:28参照先のオブジェクトが内部状態を変えることには関知しない
0145デフォルトの名無しさん
2009/12/13(日) 00:18:59class Integer
def f
self = 8
end
end
X = Integer(3)
X.f()
p X
みたいな感じで内部状態を変えることは原理的には可能でしょうか?
0146デフォルトの名無しさん
2009/12/13(日) 00:23:02オブジェクトと変数の区別を理解してから出直しておいで。
0147デフォルトの名無しさん
2009/12/13(日) 00:25:02@なんとか=8
でしょうけど。
0148デフォルトの名無しさん
2009/12/13(日) 00:29:09質問を続けます。
0149デフォルトの名無しさん
2009/12/13(日) 00:29:25Integerのような組み込みのクラスだとそれできないから、i++とかインクリメンタル演算子が実装できないんだよね・・・
0150デフォルトの名無しさん
2009/12/13(日) 00:31:32selfを変更できるクラスはRubyにはないぞ
データ格納領域がRuby的に保護されてて触れない
0151デフォルトの名無しさん
2009/12/13(日) 00:36:43(私のミスです)
自分で定義したクラスなら
class MyInt
def initialize(i)
@i=i
end
def ++() # 前置演算子の定義の仕方はしらないですが・・・
@i+=1
end
end
でいいわけですよね。
0152デフォルトの名無しさん
2009/12/13(日) 00:36:49ローカル変数のスコープの問題だねえ。
0153デフォルトの名無しさん
2009/12/13(日) 00:38:42そうですね。本当はそれが知りたかったわけですが・・・。
グローバル変数にすればいいんだけど、なんか気持ち悪い。
0154デフォルトの名無しさん
2009/12/13(日) 00:41:31みたいなのはないんでしょうか?
・・・たぶんないんでしょうね
0155デフォルトの名無しさん
2009/12/13(日) 00:44:42渡すくらいかね。
0156デフォルトの名無しさん
2009/12/13(日) 00:48:32オブジェクト自体を書き換えることはできるよね?
def method(str) {str.gsub! /a/, '!'}
x = "katakana"
puts x #=> "katakana"
method x
puts x #=> "k!t!k!n!"
0157デフォルトの名無しさん
2009/12/13(日) 00:48:47議論によって問題の所在がはっきりしてきました。
おつきあいありがとうございます。
0158デフォルトの名無しさん
2009/12/13(日) 00:51:40それはたぶん文字の配列わたしてるですね。
0159デフォルトの名無しさん
2009/12/13(日) 00:53:100160デフォルトの名無しさん
2009/12/13(日) 00:53:230161156
2009/12/13(日) 00:54:39Ruby のStringオブジェクトの内部ってArrayで表現されていたんですか?
知りませんでした。><
C言語みたいですね。
0162デフォルトの名無しさん
2009/12/13(日) 00:56:25普通の言語なら文字列の扱いはそうなってるんじゃないかなぁ?
0163デフォルトの名無しさん
2009/12/13(日) 01:06:12X='12'
def f
X.gsub!('12','2')
end
f()
p eval(X)
0164デフォルトの名無しさん
2009/12/13(日) 01:22:35文字列がイミュータブル(変更不可)な言語は普通にあるよ
Pythonなんかもそう
>>> s = 'abc'
>>> s[0] = 'A'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
上のごちゃっとしたところをまとめると
* 変数はオブジェクトに付けられた矢印(あるいはラベル)。例: a = [1,2,3]
* 変数を通じてオブジェクトを操作することが出来る。例: a[0], a[1]
* Rubyの文字列はミュータブル(変更可能)なので
変数が指すオブジェクトの中身を書き換えることができる。例: a[1] = 20 # [1,20,3]
0165156
2009/12/13(日) 01:24:26自分なりに調べてみました。
def method(obj)
obj.object_id
end
str = "katakana"
p str.object_id #=> 69877275538400
p method str #=> 69877275538400
この結果から分かりますが、上記の変数 str と obj は同一のオブジェクトを指しています。
したがって、変数 obj に対して破壊的なメソッド(オブジェクト自体を変更するメソッド)を使うと
str が指しているオブジェクトも同一ですから、objに対して行った操作が反映されている、というわけですね。
あってますか?
あと、Stringオブジェクトの内部表現については詳しくしりません。
Rubyのソースを読んでみればわかると思うのですが、まだそこまでのレベルではないので...
スレ汚し失礼しましたです。
0166164
2009/12/13(日) 01:27:10例: s = '123' # sは文字列 '123' を指す
例: s[0], s[1] # sの一文字(バイト)目と二文字目を取得
例: s[1] = '5' # sの一文字目を '5' に変更
>>165
あってるお
内部表現なんて実装次第なんだから
出来ることを正確に把握するほうが大切
0167デフォルトの名無しさん
2009/12/13(日) 01:32:12a = [0, 1, 2]
b = a
b[1] = 10
これでaが何になるのかわからなかった人は横着しないで入門書嫁
0168140
2009/12/13(日) 08:24:28結局クラスでラップする感じになるのかなぁ。
下は意図した通りに動きます。
def State(val)
Monad.new(val)
end
class Monad
def initialize(val)
@val=val
end
attr_accessor :val
end
def f(st)
st.val += 1
end
X = State 1
f(X)
p X.val
0169140
2009/12/13(日) 08:30:000170デフォルトの名無しさん
2009/12/13(日) 08:33:09i=0
Dir.chdir("C:\\"){Dir.glob('**/*'){i+=1}}
p i
=>150660
dir c:\ /s /b /a|find /c /v ""
=>154483
C:\の全ファイルを選択→プロパティのファイル数+フォルダ数
=>153390
1〜2違うどころではないんだが・・・('A`)
0171デフォルトの名無しさん
2009/12/13(日) 09:22:12DOSのコマンドを知らないから憶測だけど、
"."と".."を含めてる含めてないとか?
0172デフォルトの名無しさん
2009/12/13(日) 09:40:23日本語ファイル名が膨らまれているとか
0173デフォルトの名無しさん
2009/12/13(日) 11:00:490174デフォルトの名無しさん
2009/12/13(日) 11:22:02∅
0175デフォルトの名無しさん
2009/12/13(日) 11:44:38とすると、
"\202\240"
8進数で返ってくるのでわかりにくいです。
16進数で帰ってきて欲しいのですが、どうすればいいのでしょうか?
0176デフォルトの名無しさん
2009/12/13(日) 12:05:56class String; def inspect; "\""+ self.each_byte.map{|c| "\\x%02x" % c }.join + "\""; end; end
0177デフォルトの名無しさん
2009/12/13(日) 12:15:41あと?\と?"は別扱いでとか考え出したら面倒くせええ
0178デフォルトの名無しさん
2009/12/13(日) 12:17:32それ、他のオブジェクトをinspectするときに影響が出ちゃわない?
0179デフォルトの名無しさん
2009/12/13(日) 13:03:51class String
alias _inspect inspect
def inspect
self._inspect.gsub(/\\(\d+)/){ "\\x{%02x}" % $1.oct }
end
end
0180デフォルトの名無しさん
2009/12/13(日) 13:06:370181デフォルトの名無しさん
2009/12/13(日) 13:40:29Rubyを関数電卓代わりに使いたいんですけど
0182デフォルトの名無しさん
2009/12/13(日) 13:44:29irb でよければ _ だと思う
0183デフォルトの名無しさん
2009/12/13(日) 13:44:54irb
irb> 1+2
3
irb> _ +4
7
まあ返り値ならなんでもいいんだけど
irb> Time.now
Sun Dec 13 13:40:19 +0900 2009
irb> _.year
2009
0184デフォルトの名無しさん
2009/12/13(日) 13:48:02できればirbじゃなくても使いたいんですが無いですか
0185デフォルトの名無しさん
2009/12/13(日) 13:52:21@かなにかに保持してくれるといいと祈り続けて早10年
0186デフォルトの名無しさん
2009/12/13(日) 14:08:15俺もそれ考えたけど"\\1000"とかで困る
0187デフォルトの名無しさん
2009/12/13(日) 15:24:26こうするのが一般的?
p "あ".unpack("H*")
0188デフォルトの名無しさん
2009/12/13(日) 18:12:58実行時に呼び出すメソッドを切り替えたいのです。
0189デフォルトの名無しさん
2009/12/13(日) 18:15:34send, evalなど
0190デフォルトの名無しさん
2009/12/13(日) 18:24:48ありがとうございます。
0191デフォルトの名無しさん
2009/12/13(日) 18:25:330192デフォルトの名無しさん
2009/12/13(日) 18:49:28適切に漢字コードを指定しておけばちゃんと日本語表示されるんじゃないの?
$KCODE = 'S'
p "あ"
> "あ"
文字じゃないバイナリ列とか表示させるときに16進文字列がいいのなら
そういう出力メソッドを作るなりすれば
0193デフォルトの名無しさん
2009/12/13(日) 19:07:54あと $KCODE は 1.9 じゃ廃止だ
0194デフォルトの名無しさん
2009/12/14(月) 01:00:47def f1 end
def f2 end
・・・ってかんじでメソッドがたくさんあったときに
module_function :f1,:f2,...
って全部書くしか、外からアクセスする方法はないでしょうか?
end
0195デフォルトの名無しさん
2009/12/14(月) 01:05:210196デフォルトの名無しさん
2009/12/14(月) 01:12:46Hoge::f1
というアクセスだけ許したいのですが・・・
いちいち書くのは保守が面倒だと思ったので。
いま考えてるのは
module_function self.methods.join(' ') #未完成
みたいな怪しい方法です。
0197デフォルトの名無しさん
2009/12/14(月) 01:20:55def m1; "m1"; end
extend M
end
M.m1 #=> "m1"
0198デフォルトの名無しさん
2009/12/14(月) 01:22:36ありがとうございます。
0199デフォルトの名無しさん
2009/12/14(月) 05:51:450200デフォルトの名無しさん
2009/12/14(月) 06:07:46リファレンスより
If used with no arguments,
subsequently defined methods become module functions.
モジュール定義の頭に module_function と引数なしで書いておけば
以後に定義するメソッドにはすべて module_function が適用される。
public, private とかと同じだよ。
0201デフォルトの名無しさん
2009/12/14(月) 06:28:54メイン関数って
スクリプトを実行した時に処理系が最初に呼び出すメソッド、という意味?
そういう意味なら、書けない、でFA
そんな取り決めないし
0202デフォルトの名無しさん
2009/12/14(月) 07:36:02def main() しとけばRubyがエントリポイントとして呼んでくれる、とかいうことはないよ
ただ if __FILE__ == $0 ... って常套句を使って少し似たようなことはできる
0203デフォルトの名無しさん
2009/12/14(月) 08:32:24ruby -e 'p self'
0204デフォルトの名無しさん
2009/12/14(月) 08:53:07if __FILE__ == $0
main
end
って書いてたな
0205デフォルトの名無しさん
2009/12/14(月) 11:18:57これでもいいなぁ。
ttp://ruby-doc.org/core/classes/Module.html#M001642
ですね。
初心者はドキュメントのどこを見ればいいかも分からないので、とても助かります。
0206デフォルトの名無しさん
2009/12/14(月) 11:43:32いろんなソース読んだ限り、
Rubyではこんな感じで書いている人が多い。俺も習ってる
class Application
def initialize
end
def run
# ここにメイン処理
end
end
if __FILE__ == $0
Application.new.run
end
0207デフォルトの名無しさん
2009/12/14(月) 13:15:180208デフォルトの名無しさん
2009/12/14(月) 13:29:310209デフォルトの名無しさん
2009/12/14(月) 13:30:080210デフォルトの名無しさん
2009/12/14(月) 13:33:57そのときにその人に直してもらうことにして $0 は使ってもよし
$PROGRAM_NAME はバージョンによらず使えるんだっけ?
0211デフォルトの名無しさん
2009/12/14(月) 13:38:35引数があれば引数で指定したファイルに
引数がなければ標準出力(もしくはエラー出力)に文字列を出したい場合はどのように書いたものでしょうか?
0212デフォルトの名無しさん
2009/12/14(月) 13:46:340213デフォルトの名無しさん
2009/12/14(月) 13:48:20$stdout = File.open ARGV[0]
end
こんな感じニカ ?
0214デフォルトの名無しさん
2009/12/14(月) 13:51:15if ARGV.length > 0
f = open(ARGV[0], "w")
else
f = $stdout
end
f.write "hello"
0215デフォルトの名無しさん
2009/12/14(月) 13:52:13def output
if filename = ARGV[0]
File.open(filename, "w"){|f| yield f }
else
yield $stdout
end
end
output{|io| io.write "a"}
closeめんどくせえ
0216デフォルトの名無しさん
2009/12/14(月) 13:55:43うむ
$stdout.close がIOError で拒否られたときは軽く眩暈がした
0217デフォルトの名無しさん
2009/12/14(月) 17:25:48個々のプログラムでそういうことをするより
シェルのリダイレクトやパイプを使いなさいと言いたいのだが
出力先をプログラムの引数として受け取らなければならない理由はなんだろう?
0218デフォルトの名無しさん
2009/12/14(月) 18:09:37たとえば wget
0219211
2009/12/14(月) 19:36:53ありがとうございます、ありがとうございます
いろいろ方法ありますね。
>>217
事の発端は、最初は標準出力に出してリダイレクト(?でしたっけ)でファイルに書いていたのですが、
ファイルには出したくないBenchmarkとかで計測した結果も表示したくなってそうすると、
どうしたものかって感じになりました。
こういう時って計測結果などはエラーに出せばいいもんですかね?エラーに出していいものかどうか。
>>218
wgetは引数でファイル指定でしたっけ
0220デフォルトの名無しさん
2009/12/14(月) 20:14:480221デフォルトの名無しさん
2009/12/14(月) 20:19:22時間の計算するにはどのクラスを使えばいいでしょうか?
具体的には時間の差分を加算したりしたいのです。
例えば、
elapsed_time += Time.local(2008,12,14,1,50,10) - Time.local(2008,12,10,1,50,10)
のような感じ(実際にはTime.localの中身は可変)
elapsed_timeをTimeにする場合だと初期化にTime.at(0)しても Thu Jan 01 09:00:00 0900 1970 になったり、
0からの時間を考えられていないようなのです。
0222デフォルトの名無しさん
2009/12/14(月) 20:24:17基本的には「ない」
61s が 1m1s になるような、秒数のみを表すクラスというようなのは標準では存在しない
0223デフォルトの名無しさん
2009/12/14(月) 20:25:23Time.at(0).to_i
0224デフォルトの名無しさん
2009/12/14(月) 20:26:07そういうことか、>>223は忘れて
0225221
2009/12/14(月) 20:35:18ないですかー。
何が困るかというと、加算した差分の時間を例えば書式で出力するときにstrftimeみたいなのを自前で書かないといけないってことですよね。
誰かそういうの作ってないか探してみたんですがどうも無いようで・・・。
active_supportとかの日付の拡張あたりでなんとかならないもんですかね。
0226デフォルトの名無しさん
2009/12/14(月) 20:49:16sec = time % 60
min = (time / 60) % 60
hour = (time / (60 * 60)) % 24
day = time / (24 * 60 * 60)
puts "%dday %d:%d:%d" % [day, hour, min, sec]
こんなんでいいか?
0227221
2009/12/14(月) 21:01:02ずばりそのまま書いてくださってありがとうさんです。
使わせていだきます。
ActiveSupport使ってもこんな感じですか。かわらないやw
time = 100000
sec = time % 60
min = (time / 1.minute) % 60
hour = (time / 1.hour) % 24
day = time / 1.day
puts "%dday %d:%d:%d" % [day, hour, min, sec]
0228デフォルトの名無しさん
2009/12/14(月) 22:30:38立ち消えしてるのかな、これは。
0229デフォルトの名無しさん
2009/12/14(月) 22:34:400230デフォルトの名無しさん
2009/12/14(月) 22:36:53.NET好きな人はIronRuby使ったらいい
0231デフォルトの名無しさん
2009/12/15(火) 00:52:12Rubyを関数電卓代わりに使いたいんですけど
0232デフォルトの名無しさん
2009/12/15(火) 00:58:100233デフォルトの名無しさん
2009/12/15(火) 01:01:41よくわからんけど「Ruby 数値積分 微分」でぐぐってみた
ttp://jp.rubyist.net/magazine/?0006-RLR
こっちは結構すごそうだぞ
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/39950
0234デフォルトの名無しさん
2009/12/15(火) 01:01:55詳しくは見ていないけど、数値積分や微分はあるみたい。
ただし、最後のリリースが約2年前というのが気掛かり。
十分枯れているのだろうけれど、新しめのRubyで動くかは不明。
ところで、本格的な数式処理なら、Maximaとか使ったほうがいいんじゃない?
0235デフォルトの名無しさん
2009/12/15(火) 01:05:330236デフォルトの名無しさん
2009/12/15(火) 01:43:08導入めんどくさそうですけど頑張ってみます
0237デフォルトの名無しさん
2009/12/15(火) 02:03:40でなければ、カシオの計算センターとか。
自前のコードからコールしたいなら、ついでにそっちも自分で書いてしまう。
てのは、いかがでしょう。
0238デフォルトの名無しさん
2009/12/15(火) 06:35:31> ファイルには出したくないBenchmarkとかで計測した結果も表示したくなって
標準ライブラリの Logger を使ってみるというのは?
http://jp.rubyist.net/magazine/?0008-BundledLibraries
0239デフォルトの名無しさん
2009/12/15(火) 09:20:540240デフォルトの名無しさん
2009/12/15(火) 09:53:38カジュアルなデータ計算をさせることが期待されるプログラミング言語のトップグループにいることは間違いない
専門数値計算ソフトやC(やJava)を持ち出さなくてもいい程度の計算なら、もっと気楽にできてもいい
高校や大学1年教養の宿題をうっかり解けてしまうような、そんな用途があってもいいはず
0241デフォルトの名無しさん
2009/12/15(火) 10:06:280242デフォルトの名無しさん
2009/12/15(火) 10:09:150243デフォルトの名無しさん
2009/12/15(火) 10:20:550244デフォルトの名無しさん
2009/12/15(火) 10:28:350246デフォルトの名無しさん
2009/12/15(火) 15:56:000247デフォルトの名無しさん
2009/12/15(火) 18:38:35ワンライナーで時間の計算をする時に24時間以内なら
ruby -rtime -e "a=Time.parse('09:08:20')-Time.parse('01:40:02');puts Time.at(a).utc.strftime('%H:%M:%S')"
とかしたりしますな
0248デフォルトの名無しさん
2009/12/15(火) 18:47:01でも自己責任の域を出れない
0249デフォルトの名無しさん
2009/12/15(火) 18:54:35puts "私は#{name}です"
nameに日本語を入力するとエラーが出てしまいます
C:/My Documents/g/Ruby/test.rb:4:in `<main>': incompatible character encodings: ASCII-8BIT and
Windows-31J (Encoding::CompatibilityError)
これはどういったエラーなんでしょうか?
0250デフォルトの名無しさん
2009/12/15(火) 19:03:50初心者は Ruby1.9 使うなってこれだけ言われてるのになんでわからんのだエラー
0251デフォルトの名無しさん
2009/12/15(火) 19:08:17Windows-31Jがロードできたら標準入力もそっち使うようになってなかったっけ
どういうときにそんなことになりえるのか知りたい、誰か教えて
0252デフォルトの名無しさん
2009/12/15(火) 19:08:200253デフォルトの名無しさん
2009/12/15(火) 19:21:350254デフォルトの名無しさん
2009/12/15(火) 19:36:02とりあえず>>249は1.9使い続ける気ならマジックコメントを使えるようになるべき
0255デフォルトの名無しさん
2009/12/15(火) 19:38:080256デフォルトの名無しさん
2009/12/15(火) 19:50:04http://www.wolframalpha.com/
0257デフォルトの名無しさん
2009/12/15(火) 19:52:31>>1
0258デフォルトの名無しさん
2009/12/15(火) 20:10:57じゃあファイルごとに違う文字エンコーディングをインタプリタに知らせる方法を考えてくれ
0259デフォルトの名無しさん
2009/12/15(火) 20:18:580260デフォルトの名無しさん
2009/12/15(火) 20:25:36マイナー環境に媚びすぎるあまり全員が等しくLoseしちゃうなんてあまりにも悲しい。
0261デフォルトの名無しさん
2009/12/15(火) 20:27:49それ 1.8 じゃん…
0262デフォルトの名無しさん
2009/12/15(火) 20:29:510263デフォルトの名無しさん
2009/12/15(火) 20:32:17マッキン使えマッキン
0264デフォルトの名無しさん
2009/12/15(火) 20:36:270265デフォルトの名無しさん
2009/12/15(火) 22:35:13Pythonはもろそれにぶつかったな。よくそれではまったよ。
あのさ、require 'foo' したときの、foo.rb または foo.so の在処をしるにはどうしたらいいんだっけ。
よく聞かれる質問だと思うけど、だれか教えて。
0266デフォルトの名無しさん
2009/12/15(火) 22:44:320267デフォルトの名無しさん
2009/12/15(火) 22:47:55前スレでみたのは
gem which foo
0268デフォルトの名無しさん
2009/12/15(火) 22:57:270269デフォルトの名無しさん
2009/12/15(火) 23:04:43それは求めるものじゃないなー
>>268
それはファイル名だけだよね。ディレクトリ名も含めたパスが欲しい。
0270デフォルトの名無しさん
2009/12/15(火) 23:10:310271デフォルトの名無しさん
2009/12/15(火) 23:10:37結局こうしました
$ ruby -r nkf -e 'puts $:.map {|x| Dir.glob("#{x}/nkf*") }.flatten'
/usr/local/lib/ruby/1.8/i686-darwin10.0.0/nkf.bundle
0272デフォルトの名無しさん
2009/12/15(火) 23:45:36http://svn.ruby-lang.org/repos/ruby/tags/v1_8_7/NEWS
0273デフォルトの名無しさん
2009/12/15(火) 23:59:23Thanks.
わーおEnglishじゃん!開発者は日本人が多いのに、ぷんぷん!
0274デフォルトの名無しさん
2009/12/16(水) 00:05:46ていうか、これ読んで分かるの開発陣だけだから。
Ruby利用者がよんでもわけわからん。
0275デフォルトの名無しさん
2009/12/16(水) 00:12:20でも、Ruby(特に日本の)ではそういうのが特にないんだよね
商売っけがないというか、目立ちたがり屋がいないというか
ちなみにオフィシャルの仕事ではないのでこれ以上は望んじゃ駄目よ
取り巻きの役目
0276デフォルトの名無しさん
2009/12/16(水) 00:15:590277デフォルトの名無しさん
2009/12/16(水) 00:18:070278デフォルトの名無しさん
2009/12/16(水) 00:18:17ttp://d.hatena.ne.jp/rubikitch/20080508/ruby187
0279デフォルトの名無しさん
2009/12/16(水) 00:31:54神いわゆるゴッド
0280デフォルトの名無しさん
2009/12/16(水) 01:55:08>ちなみにオフィシャルの仕事ではないのでこれ以上は望んじゃ駄目よ
なんで?
ちなみにPythonはα版でもこれだけの出来。
ttp://docs.python.org/dev/whatsnew/2.7.html
これだけの差がありながら、「Rubyはドキュメントが揃ってる」とぬかす古参上級者がほんとジャマ。
0281デフォルトの名無しさん
2009/12/16(水) 02:03:55Python3.0のWhat's newはGuido書き下ろしだし
ドキュメントは取り巻きに任せろってのはガンかもしれないね
でもこれ本スレでやったらいいよ
初心者にはいい迷惑だ
0282デフォルトの名無しさん
2009/12/16(水) 02:11:24人材が究極的に少ないから
現状に加えて一般向けにドキュメント揃えろなんて言ったらどんどんリリースが遅くなる
当事者だからという理由だけでできない人に無理やりやらせる理由はない
得意な人に任せておけばいい
まあ初心者スレ向けでないのとドキュメント揃ってるほうだと言ってる人間が障害になってるのには同意
0283デフォルトの名無しさん
2009/12/16(水) 10:33:28雰囲気は似てるからrubyに書き換えて動作させてみろという
perlもrubyもほとんど触ったことない俺にどうしろっていうんですか…
書き換え方にコツとかあるんでしょうか?元のperlプログラムにはサブルーチンにハッシュやら配列やらが結構混ざって泣きそう
0284デフォルトの名無しさん
2009/12/16(水) 10:43:08とりあえず元のプログラムが何をするものなのか理解しないことには
始まらないと思われ
0286デフォルトの名無しさん
2009/12/16(水) 11:06:02Rubyで簡単なGUIアプリを作ろうとしているのですが、現在何がオススメでしょうか?
環境は、Ruby 1.8.7、Windowsです。
できれば、あくまでできればですが、実行環境では追加のリソース(ランタイム)が必要ないものがよいのですが…
例えばexeに固めれば単体で実行できる、もしくはRubyとそのライブラリがあれば動くと言ったようなものです。
下記サイトでは、shose(why氏とともにサイト死んでる?)、Ruby-GNOME2、wxRubyがよく使われているとありますが、
みなさんは何を使われてますか?
Ruby GUI調査2008
http://www.pressure.to/ruby_gui_survey/index-ja.html
0287デフォルトの名無しさん
2009/12/16(水) 11:14:52> Rubyで簡単なGUIアプリを作ろうとしているのですが、現在何がオススメでしょうか?
RubyではGUIアプリケーションは作らない
0288デフォルトの名無しさん
2009/12/16(水) 11:15:28でも上の縛りがなければwxRuby+Ocra
あとやったことないけどWebアプリ+RubyStationも面白そう
0289286
2009/12/16(水) 11:24:17samples at master from shoes's shoes - GitHub
http://github.com/shoes/shoes/tree/master/samples/
>>287
(´;ω;`)ブワッ
昔Delphi使ってたんでそっちでもいいんですが、できれば最近なれたRubyでGUI作れたらなとか思うわけですよ…
>>288
必ずしもexe単体でなくてもいいです。
webアプリは面白そうなんですが、とりあえず、vrubyとwxRuby試してみます
0290デフォルトの名無しさん
2009/12/16(水) 11:26:150291デフォルトの名無しさん
2009/12/16(水) 11:28:250292デフォルトの名無しさん
2009/12/16(水) 11:31:44中にはHSPからシェル経由でスクリプト呼んで引数連携させたほうがマシといゲフンゲフン
0293デフォルトの名無しさん
2009/12/16(水) 11:43:07パスに{}[]が含まれると良くない
0294デフォルトの名無しさん
2009/12/16(水) 11:51:03一般に使ってもらうならともかく、自分の用が果たせたならそれでいいんじゃないか?
0295デフォルトの名無しさん
2009/12/16(水) 13:56:13これて古くないんでしょうか?wxWidgetの0.6.0だったりしませんか?
ruby -v #=> ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] 古いな…
0296uy ◆e6.oHu1j.o
2009/12/16(水) 17:55:27小さなツールとWebアプリケーションとGUIゲームくらいならrubyで作れるようになったんですが
ルビリストと呼ばれるようになる為の次のステップ教えてください
0297デフォルトの名無しさん
2009/12/16(水) 18:05:30とくにRubyのバックグラウンドを育んだLispやSmalltalkを。
0298デフォルトの名無しさん
2009/12/16(水) 18:09:09PerlがまだならPerlも齧れ
オブジェクト指向の関係でJavaもできるといいんだが
0299デフォルトの名無しさん
2009/12/16(水) 18:12:54もの凄い勢いでRuby初心者スレ/本スレ/ruby-list等
あらゆるサイトの質問にコテハンで答えまくる
質の高い回答が数千溜まるとGoogleに雇ってもらえる
0300デフォルトの名無しさん
2009/12/16(水) 18:14:140301デフォルトの名無しさん
2009/12/16(水) 18:27:26広告塔の人間もたくさんいるし
0302デフォルトの名無しさん
2009/12/16(水) 18:47:10>ルビリストと呼ばれるようになる為の次のステップ教えてください
るびまの添削記事を読むのがいいと思う。
ttp://jp.rubyist.net/magazine/?0010-CodeReview
ttp://jp.rubyist.net/magazine/?0011-CodeReview
ttp://jp.rubyist.net/magazine/?0013-CodeReview
ttp://jp.rubyist.net/magazine/?0015-CodeReview
ttp://jp.rubyist.net/magazine/?0017-CodeReview
0303デフォルトの名無しさん
2009/12/16(水) 18:51:14>人材が究極的に少ないから
>現状に加えて一般向けにドキュメント揃えろなんて言ったらどんどんリリースが遅くなる
>当事者だからという理由だけでできない人に無理やりやらせる理由はない
>得意な人に任せておけばいい
ばかをいえ、ChangeLogやNEW FEATURESなんて、開発当事者ぐらいしか詳しくは知らないんだから
開発当事者が書くべきだろ。
こんなことすらも嫌がる開発陣ってなんなの?
どうせ開発リソースが増えたところで、ドキュメントに回すつもりないんだろ。
0304283
2009/12/16(水) 19:00:12283です。
>>284
jcorrectとかいうやつだったかな
プログラムを実行して文章を入力すると、cabochaの解析結果と一緒に文章の校正を促すメッセージが出た
これを実行するためにcabochaとかいろいろ入れてた
プログラムを読んでいると、サブルーチンから値を順に渡していたり$foo->{$var}->とか見たことないのがいっぱいでなんかもうキーーーーってなったんだ…
0305デフォルトの名無しさん
2009/12/16(水) 19:06:54言ってること自体には賛同できるけどそういうのは本スレでどうぞ
0306デフォルトの名無しさん
2009/12/16(水) 23:36:21実行環境:Xubuntu9.10、Ruby1.9.1
使用ライブラリ:tk、pty、expect
やりたいことは、外部プログラム(対話型のCUIプログラム)をRubyスクリプト内から実行する際に、
外部プログラムの実行結果(標準出力。エラーが発生して終了したならその時のエラー出力)
を取得したいのですが、何か方法はあるでしょうか。
ネットを見るとsshやtelnetのサンプルが転がってますが、
sshやtelnetが出力するメッセージ自体やエラー文(はあるのかな?)を処理するようなものがなく、
どうするんだーと悩んでます。
0307デフォルトの名無しさん
2009/12/16(水) 23:43:41` ... ` (バッククォート)でコマンド実行して出力取る
手の込んだことがしたければ require 'open3'
0308デフォルトの名無しさん
2009/12/17(木) 00:23:55↓みたいにマニフェストをruby/bin/において、Windows XP移行のLuna(?)風のUIにする方法があるんですが、
Ruby on Windows: Windows XP Visual Style Controls with wxRuby
http://rubyonwindows.blogspot.com/2007/10/windows-xp-visual-style-controls-with.html
…うまくいきません。
古いルックアンドフィールのままになります。
上記サイトのxmlをファイルをruby.exe.manifestとrubyw.exe.manifestに新規作成してコピペして、
ruby/binに放りこめばいいんですよね?
0309デフォルトの名無しさん
2009/12/17(木) 00:38:30ありがとうございます。
標準出力と標準エラー出力に違いがあるのを知らなかったですorz
open3は標準入力・出力・エラー出力のみ対応という形だったので、
except実行→出力結果を一時ファイルに出力→実行元プログラムでopen
という形で無事結果を得られるようになりました。
PTYがttyを別個に作ってそっちで実行させるっぽいのでバッククォート使えない(のかなぁ……)
0310245
2009/12/17(木) 11:43:14Benchmarkの出力結果が余計な改行が入るのですが、これってこんなもん?
time = Benchmark.measure do
:(略)
end
logger.debug Benchmark::CAPTION
logger.debug time.to_s
0311デフォルトの名無しさん
2009/12/17(木) 12:21:56logger は対象のオブジェクトを to_s しての末尾に改行つけて書き出してるに過ぎない
何か問題あるならそのオブジェクトの to_s 調べれ
0312245
2009/12/17(木) 13:01:09舌足らずでごめんなさい。
puts Benchmark::CAPTION
puts time.to_s
だと改行の問題ないんです。気味が悪いんですが、何でなんでしょ
0313デフォルトの名無しさん
2009/12/17(木) 13:10:17改行が問題になるときの検証に puts 使ったら駄目
puts は文字列末尾に改行があったら自前で改行をつけない
というかこれはそのまんまで
irb> require 'benchmark'
irb> p Benchmark::CAPTION
" user system total real\n"
そもそも改行が末尾に入ってる
気になるなら Benchmark::CAPTION.chomp を logger に渡す
0314デフォルトの名無しさん
2009/12/17(木) 18:13:47漏れは大変なことを知ってしまった
近いうちに消されるかもしれない
0315デフォルトの名無しさん
2009/12/17(木) 18:18:58id('Layer3')//td[
following-sibling::td//a[contains(@href,
'http://money.www.infoseek.co.jp/MnStock')]]/b//font[@color]
0316sage
2009/12/17(木) 21:38:37trunk には Date::Delta ってのが入ってるよ
0317デフォルトの名無しさん
2009/12/17(木) 22:32:29describe ... や it .... で書いたひとまとまりを、なんて呼ぶの?
たとえば Test::Unit なら
class FooTestCase < Test::Unit::TestCase ← これはテストクラス
def test_equal ← これはテストケース
assert_equal(2, 1+1)
end
end
のような呼び方をしてると思うんですけど、RSpecの場合は何と呼ぶのかわからないので、教えてください。
0318デフォルトの名無しさん
2009/12/17(木) 23:36:33We use the describe( ) method to define an example group.
The it( ) method defines a code example.
なお、
describe(および別名のcontext)メソッドが作るのは
Spec::Example::ExampleGroupのサブクラス
it(および別名のexample)メソッドが作るのは
それのインスタンスメソッド
になる
0319デフォルトの名無しさん
2009/12/18(金) 06:03:22001
002
のような、3桁の連番を表示したいんですが、どうやればいいんですか。
for i in 001..100
だと
1
2
になるんですが。
0320デフォルトの名無しさん
2009/12/18(金) 06:18:23for i in 1..100
p '%03d' % i
end
数字の頭に0がつくとRubyでは8進数って意味になるので注意
0321デフォルトの名無しさん
2009/12/18(金) 06:23:070322デフォルトの名無しさん
2009/12/18(金) 06:25:56見事にできました。
素早い回答どうもありがとうございました。
0323デフォルトの名無しさん
2009/12/18(金) 10:03:11・Basic認証またはDigest認証
・IPアドレスによるアクセス制限
を実現したいのですが、サンプルとか参考になるページがあれば教えてください。
「WEBrick IPアドレス 制限」とかでぐぐったけど、それらしいのはヒットしませんでした。
0324デフォルトの名無しさん
2009/12/18(金) 10:32:21ちなみに、今使っているサンプルはこんなのです。
require 'webrick'
server = WEBrick::HTTPServer.new({
:DocumentRoot => '.',
#:BindAddress => '127.0.0.1',
:Port => 3000,
})
Signal.trap('INT') { server.shutdown }
Signal.trap('TERM'){ server.shutdown }
server.start
0325デフォルトの名無しさん
2009/12/18(金) 11:10:43WEBrick::HTTPAuth::BasicAuth
WEBrick::HTTPAuth::DigestAuth
IPアドレスでの制御は HTTPRequest#addr あたりを見て403を返せばいいんじゃない?
0326デフォルトの名無しさん
2009/12/19(土) 12:18:34% irb1.9.1
irb(main):001:0> h=Hash.new([])
=> {}
irb(main):002:0> h
=> {}
irb(main):003:0> h[1]
=> []
irb(main):004:0> h[3]
=> []
irb(main):005:0> h[1] << 2
=> [2]
irb(main):006:0> h
=> {}
irb(main):007:0> h[1]
=> [2]
irb(main):008:0> h[3]
=> [2]
0327デフォルトの名無しさん
2009/12/19(土) 12:29:26http://www.ruby-lang.org/ja/man/html/trap_Hash.html
ぶっちゃけRubyの怪しげな機能は使わないほうがいいと思う
0328デフォルトの名無しさん
2009/12/19(土) 12:32:18そりゃArrayやHashの初期値つきnewは毎回初期値のオブジェクトを生成するからな
irb> p h[2].object_id == h[2].object_id
false
irb> h=Hash.new([])
{}
irb> h[1]=[2]
[2]
irb> h
{1=>[2]}
0329デフォルトの名無しさん
2009/12/19(土) 12:39:22> p h[2].object_id == h[2].object_id
これうち(1.8.7cygwin)でやるとtrueになるんだが1.9で変わったとか?
0330デフォルトの名無しさん
2009/12/19(土) 12:42:53それだとh[1]の参照先(初期値オブジェクト[])に2を入れてることにしかならない
h[1] = ほげほげ
としない限り
{1=>ほげほげ}にはならない
0331デフォルトの名無しさん
2009/12/19(土) 13:35:34<i> Now using system ruby. </i>
$ irb --prompt simple
>> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]"
>> h = Hash.new([])
=> {}
>> [h.default, h[0], h[1]].map(&:object_id)
=> [2156963800, 2156963800, 2156963800]
$ rvm use 1.9.1-head
<i> Now using ruby 1.9.1 head </i>
$ irb --prompt simple
>> RUBY_DESCRIPTION
=> "ruby 1.9.2dev (2009-12-11 trunk 26067) [x86_64-darwin10.2.0]"
ruby-1.9.1-head > h = Hash.new([])
=> {}
>> [h.default, h[0], h[1]].map(&:object_id)
=> [2151892720, 2151892720, 2151892720]
0332デフォルトの名無しさん
2009/12/19(土) 15:45:530333デフォルトの名無しさん
2009/12/19(土) 16:35:240334デフォルトの名無しさん
2009/12/19(土) 16:59:490335デフォルトの名無しさん
2009/12/19(土) 17:53:520336デフォルトの名無しさん
2009/12/19(土) 18:26:49同じオブジェクトが返るというのが正しく、
毎回異なるオブジェクトが返るというのは誤り。
0337デフォルトの名無しさん
2009/12/19(土) 18:37:340338デフォルトの名無しさん
2009/12/19(土) 18:47:27「マニュアルのここ読めわかりやすくて疑問の余地無し氏ね」
と言える環境を揃えるほうが先な気もする
0339デフォルトの名無しさん
2009/12/19(土) 23:53:39それは初期値じゃなくて初期ブロックじゃないのか?
h = Hash.new{|hash,key| [] }
p h[2].object_id == h[2].object_id # => false
未設定のキーを指定された時に、そのつどブロックを実行した結果を返す
よって同じキーでも毎回違うArrayが帰ってくる
0340デフォルトの名無しさん
2009/12/20(日) 01:14:37ようやくたどり着いたと思ったら、
xxxx()
執筆者を募集中
おい、コードを書いたのはどこに行ったの?
採用した人は?
なので、動かないものは、自分で書き直すことにしてる。
一から一人でするより、ちょっと近道。
0341デフォルトの名無しさん
2009/12/20(日) 05:46:41>質問するならリファレンスマニュアルくらい読んでからこい
おまえは書き込むまえに>>1を読んでこい
0342デフォルトの名無しさん
2009/12/20(日) 06:50:04おまえは書き込むまえに>>1を読んでこい
0343デフォルトの名無しさん
2009/12/20(日) 07:39:010344デフォルトの名無しさん
2009/12/20(日) 09:13:460345デフォルトの名無しさん
2009/12/20(日) 10:15:450346デフォルトの名無しさん
2009/12/20(日) 10:27:170347デフォルトの名無しさん
2009/12/20(日) 12:45:29Hpricotで日本語テキストのリンク検索が上手く動きません
どうすればNokogiriと同じ動きになるのでしょうか
#!ruby -Ku
require 'hpricot'
require 'nokogiri'
html = "<html><a>りんく1</a><a>りんく2</a><a>りんく3</a></html>"
doc = Hpricot(html)
print doc.at("a[text()*='りんく2']"); # エラー発生
doc = Nokogiri(html)
print doc.at("a[text()*='りんく2']"); # こちらは正しく動く
エラー内容
/usr/local/lib/ruby/gems/1.9.1/gems/hpricot-0.8.2/lib/hpricot/elements.rb:486:in `index':
incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)
0348デフォルトの名無しさん
2009/12/20(日) 12:48:10初心者は Ruby1.9 使うなってこれだけ言われてるのになんでわからんのだエラー
0349デフォルトの名無しさん
2009/12/20(日) 12:54:16というか何もわからず動かしていることが原因で、
Nokogiri が動いたのはただの偶然に過ぎない
むしろ「Nokogiri が動いたのは何故ですか」という質問になるべき事象
無理しないで Ruby 1.8.7 使え
1.8.7 を理解したあとで差分学習で 1.9.1 を習得するのが一番早い
0350デフォルトの名無しさん
2009/12/20(日) 12:57:100351デフォルトの名無しさん
2009/12/20(日) 12:59:15作者の _why the lucky stiff はネット上から失踪しているので、事実上塩漬け状態。
0352デフォルトの名無しさん
2009/12/20(日) 16:02:52rdoc が生成する HTML について、特定の要素(例えば <pre>タグ)のスタイルだけ
いじりたいという場合はどうしたらいいのでしょうか?
0353デフォルトの名無しさん
2009/12/20(日) 16:27:02ちょっと見た感じでは rdoc に --template オプションで
自作のテンプレートを指定してやればいいんじゃまいか
既存のテンプレが rdoc/genarators/template/html に入ってるから
それを部分的に書き換えて使えばよさそう
0354デフォルトの名無しさん
2009/12/20(日) 19:17:36>>347がhpricot使いたいと思った理由はなんだろ
0355デフォルトの名無しさん
2009/12/20(日) 19:20:40もしそうならHpricotきめえとかdisるのやめて冥福を祈る
0357デフォルトの名無しさん
2009/12/20(日) 20:19:30自分できれいさっぱり痕跡を消していった。
0358352
2009/12/21(月) 15:57:51rdoc の --style オプションにスタイルシートのパスを渡すことで
HTML生成時に自前のスタイルシートを読み込ませることができました。
テンプレから CSS の部分だけ切り出して編集して、
rdoc --style=path_to/hoge.css
でうまくいきました。
というか、manページに普通に書いてあったorz
0359デフォルトの名無しさん
2009/12/21(月) 22:18:49doc = Hpricot(open(uri).read)
(doc/:a).each do | link |
if link[:href] == '#'
p "設定し忘れ => #{link[:lineno]}"
end
end
みたいに、行番号を取得することって出来ませんか?
0360デフォルトの名無しさん
2009/12/21(月) 22:21:13ないならできない
自分で行番号だと思うものを作って数えるしかない
0361デフォルトの名無しさん
2009/12/22(火) 09:38:58その程度なら普通に正規表現でよさそうだね。
File.open(filename) do |f| i = 0
f.each_line do |line|
i += 1
puts "#{filename}:#{i}: 設定し忘れ" if /href=("¥#"|'¥#¥')/
end
end
0362デフォルトの名無しさん
2009/12/22(火) 09:39:080363デフォルトの名無しさん
2009/12/22(火) 09:45:490364デフォルトの名無しさん
2009/12/22(火) 10:39:360365デフォルトの名無しさん
2009/12/22(火) 11:00:200366デフォルトの名無しさん
2009/12/22(火) 11:10:57./data/a.rb
./data/1.txt
./main.rb
ってあったときに
main.rbからa.rbをrequireするんですけど
a.rbは
open("1.txt","r") これで読めるようにしたいです
0367デフォルトの名無しさん
2009/12/22(火) 11:21:49Dir.chdir "./data"
# 作業
Dir.chdir save
とかかな
同じディレクトリにあるファイルを使うってことなら
open(File.dirname(__FILE__)+"/1.txt")
でもいいかも
0368デフォルトの名無しさん
2009/12/22(火) 11:34:120369デフォルトの名無しさん
2009/12/22(火) 11:36:29それでいけそうです
ありがとうございます
0370デフォルトの名無しさん
2009/12/22(火) 11:37:30ソートするとなおみやすい
puts Object.methods.sort
0371デフォルトの名無しさん
2009/12/22(火) 11:41:30Object#instance_variables
0372デフォルトの名無しさん
2009/12/22(火) 12:00:57これが欲しかった。
0373デフォルトの名無しさん
2009/12/22(火) 12:36:02Nokogiriの要素は #line メソッドがあるはず。
0374デフォルトの名無しさん
2009/12/22(火) 14:41:59Dir.chdir "./data" do
# 作業
end
でもいけるよ。
0375デフォルトの名無しさん
2009/12/22(火) 14:46:45おお知らなかった
もっかいリファレンス見直すことにしよう
0376デフォルトの名無しさん
2009/12/23(水) 10:27:52hoge/lib/ ← 自作ライブラリの rb ファイル
hoge/test/ ← lib のファイルに対応するテストスクリプト
という一般的なディレクトリ構成で test/test_hoge.rb を実行する場合、どうするのが「ふつう」なんだ?
:~/hoge$ ruby test/test_hoge.rb
:~/hoge/test$ ruby test_hoge.rb
:~/hoge$ testrb test/test_hoge.rb
:~/hoge/test$ testrb test_hoge.rb
0377デフォルトの名無しさん
2009/12/23(水) 11:29:21普段はrakeのTestTask任せだから、どうやってるか意識してないわ。
TestTaskの中をみてみたけど、testrbを使うことも使わないことも可能みたい。
(デフォルトはrakeのライブラリ内の機能を使う)
なお、rakeの場合、test/ の中で起動しても、ディレクトリを遡ってRakefileを
探して、見つかったディレクトリで動くので、hoge/Rakefileとして置いている
場合は、実質的には hoge直下でやってることになるはず。
0378デフォルトの名無しさん
2009/12/23(水) 11:52:34テストするためだけに test/ に降りてしまうのは、どうも…
0379デフォルトの名無しさん
2009/12/23(水) 11:54:140380デフォルトの名無しさん
2009/12/23(水) 11:55:550381デフォルトの名無しさん
2009/12/23(水) 12:04:420382デフォルトの名無しさん
2009/12/23(水) 13:39:33autotestでファイル保存と同時に自動でテスト実行だろJK
0383362
2009/12/23(水) 13:40:520384デフォルトの名無しさん
2009/12/23(水) 13:52:22テストが通らないタイミングでファイルを保存したりしないの?
というか編集途中で保存し辛くなりじゃん
0385デフォルトの名無しさん
2009/12/23(水) 13:54:010386デフォルトの名無しさん
2009/12/23(水) 14:12:02autotestを使うかどうかとはまた別の議論だと思う
0387デフォルトの名無しさん
2009/12/23(水) 15:17:10コードを保存したいタイミングと、テストを走らせたいタイミングは別じゃね?
エディタからテストを実行させられればそれでいいけどなあ。
わざわざ保存したときに勝手にテストが走ってほしくないよ。
0388デフォルトの名無しさん
2009/12/23(水) 18:03:22シェルの履歴ぐらい使うだろう。
0389デフォルトの名無しさん
2009/12/23(水) 18:27:27実行できるテキストエディタを使うがよろし。
俺はVim使ってるけど。
0390デフォルトの名無しさん
2009/12/23(水) 18:36:19右端のタブをテスト用に使ってる
タブ切り替えにキーを割り当ててやるとかなり快適だ
同じ用途で GNU Screen とか使ってる人もいるのでは?
0391デフォルトの名無しさん
2009/12/23(水) 19:41:160392デフォルトの名無しさん
2009/12/23(水) 21:51:25そうかー、その品は人それぞれだな。
autotest連携で結果をSnarl(今ならGrawlか?)で通知出したり、サウンド出したりしてるけど
けっこう快適よ?
ただ、coLinuxで動かすとその辺の連携がしにくくて困る
さらに、AutoHotKeyで保存キー入力と同時にブラウザリロードとかもやってる。
0393デフォルトの名無しさん
2009/12/24(木) 01:40:48保存とか意識したことがないなー。
0394デフォルトの名無しさん
2009/12/24(木) 09:39:55という警告がでて困ってます。
この警告だけを出さないようにする方法があれば教えてください。
home のパーミッションが 777 なのがおかしい!といわれればそうなんですけど、
下請けにはそんなことすら変更する権限がないんです。
0395デフォルトの名無しさん
2009/12/24(木) 09:47:09知らんよ
RailsはRailsスレで
0396デフォルトの名無しさん
2009/12/24(木) 10:47:41環境を詳しく
もしRailsなら権限くれっていえ。まともに開発できんから
0397デフォルトの名無しさん
2009/12/24(木) 11:31:38ENV['PATH']から /home を抜け。
0398デフォルトの名無しさん
2009/12/24(木) 11:33:560399デフォルトの名無しさん
2009/12/24(木) 11:52:12なぜRails?
>>396
環境はlinux 2.6.9-89.EL, ruby 1.8.7-p174です
>>397
$PATHには/homeがないけど、/home/username/binがあります。
これを除くことはできないので、どうしたもんか困ってます。
0400デフォルトの名無しさん
2009/12/24(木) 12:28:440401デフォルトの名無しさん
2009/12/24(木) 12:32:16* コマンドの環境だけ変える。
PATH=/usr/bin:/bin(などなど) ruby 引数
とか
* 一度変えて戻す
OLD_PATH=$PATH
PATH=/usr/bin:/bin(などなど)
ruby 引数
PATH=$OLD_PATH
とか
* サブシェル内で変える
(
PATH=....
ruby
)
とかでもいい。
0402デフォルトの名無しさん
2009/12/24(木) 16:39:54gem dependency を使ってみているんですがうまくいきません。
$ gem dependency mechanize -v "0.9.3" --remote
Gem mechanize-0.9.3
nokogiri (>= 1.2.1, runtime)
hoe (>= 1.12.2, development)
$ gem dependency mechanize -v "0.9.0" --remote
No gems found matching mechanize (= 0.9.0)
$ gem dependency mechanize -v "<0.9.0" --remote
Gem mechanized_session-0.0.2
mechanize (>= 0.9.3, runtime)
hoe (>= 2.3.3, development)
何がやりたいかというとmechanizeでnokogiri非依存のバージョンを探したいのです。
0403デフォルトの名無しさん
2009/12/24(木) 16:56:21WWW::Mechanize.html_parser = Hpricot
0404デフォルトの名無しさん
2009/12/24(木) 17:04:10libxml2 に依存したくないというのなら>>403
Nokogiri のインストール自体を dependency 経由で行って欲しくないというのなら、Mechanize 0.8.4 かそれ以前が必要
0405402
2009/12/24(木) 17:13:20>>403
あー、いや、Bundlerで利用しようとしておりまして、
実行環境ではNokogiriが動かないため依存段階そのものから外したいのです。
# 実際はappengine-jrubyでmechanizeを使いたいという難儀なアレなのです
# jruby版Nokogiriはffi依存のせいでappengineでは動かんのですわ・・・
appengine-jruby - Project Hosting on Google Code
http://code.google.com/p/appengine-jruby/
>>404
ありがたい
0.8.4ですね、試してみます。
後学のために聞きたいのですが、こういうのってどうやって調べられるもんなんでしょうか?
以前はgemコマンドでgemのパッケージ時の設定を見る方法があったような気がしたのですが、どこいったんでしょう?
0406402
2009/12/24(木) 17:16:34mechanize 0.9.3では >>403したいところなんですが、
require 'mechanize'
するだけでffiねーぞゴラァ(appengine版のjrubyでは含まれてないためらしいです。pure java版Nokogiriが望まれます)
のエラーがでてしまうのです。
0407デフォルトの名無しさん
2009/12/24(木) 17:20:09何もしてない
賞味3分の力技
add_dependency から Nokogiri が消えるまで mechanize.gemspec の github 履歴を直接調べて遡った
0408デフォルトの名無しさん
2009/12/24(木) 18:55:35長くなり過ぎたメソッドチェーンの途中に改行を入れる場合、
皆さんはどこで改行するのが適切だと思いますか?
1) ピリオドの後に \
value = this.is.a.\
very.long.method.chain
2) ピリオドの前に \
value = this.is.a\
.very.long.method.chain
3) そもそも途中で改行しない
value = this.is.a
value = value.very.long.method.chain
0409デフォルトの名無しさん
2009/12/24(木) 19:03:30長くなりすぎたと感じる時点で「よくないコードの匂い」なので、リファクタリング開始
0410デフォルトの名無しさん
2009/12/24(木) 19:13:53メソッドチェーンでは改行は入れない
今更80文字制限などとは言わないが、メソッドチェーンで長い場合は途中変数で分ける
該当するとすれば3
0411408
2009/12/24(木) 19:16:52長くなり過ぎた場合という表現にちょっと語弊があったかも知れません。
実際にはメソッドのブロック付き呼び出しが2〜3続くような場合で
どうしても1行には収まらない場合、です。例をあげると
files = Dir.glob("**/*.rb").select {|file| ... }.reject {|file| ... }.map {|file| ... }
のようなパターンです。
0412402
2009/12/24(木) 19:18:31ΩΩΩな、なんだってー。恐れ入りました。そんな手がw
gem dependencyやgem specコマンドは--remoteのときには最新版からしかとれないんですね。
一旦gemをインスコしたらOK見られるようですが・・・
0413デフォルトの名無しさん
2009/12/24(木) 19:19:43files = Dir.glob("**/*.rb").select {|file| ... }.
reject {|file| ... }.map {|file| ... }
って俺はやってるな
0414デフォルトの名無しさん
2009/12/24(木) 19:20:46> メソッドチェーンでは改行は入れない
>>411 であげたようなパターンでもそうなのですか?
自分はああいうパターンだとピリオドの後で改行しちゃうのですが、
一般的には推奨されない(マナーの悪い)書き方なのでしょうか
0415408
2009/12/24(木) 19:24:34ピリオドの後は \ なくてもいいんですよね。
自分の場合意図的な改行であることを明示するために \ を付けてます。
というか、>>411 の例は最後の map が意味的におかしいですね、しまったorz
0416デフォルトの名無しさん
2009/12/24(木) 19:29:58...
}.reject{|file|
...
}.map{|file|
...
}
0417デフォルトの名無しさん
2009/12/24(木) 21:32:51なぜそんなにつなぎまくるのかと
0418デフォルトの名無しさん
2009/12/24(木) 22:41:13自分の場合はつなぐというより、
つながっていくという感じでついつい長くなってしまうw
返値を無駄にしたくないというか
変数の名前を processed_values とかにした場合も名前に引きずられて
途中の状態を入れたくないという雑念が生じ、無理してでも一連のチェーンで書いちゃう
0419デフォルトの名無しさん
2009/12/25(金) 01:09:130420デフォルトの名無しさん
2009/12/25(金) 01:25:21ttp://www.sakalab.net/prog-ruby/ruby-man-html-20080121/ping.html
0421デフォルトの名無しさん
2009/12/25(金) 01:35:210422デフォルトの名無しさん
2009/12/25(金) 01:38:510423デフォルトの名無しさん
2009/12/25(金) 05:59:43files.reject! {|file| ... }
files.map! {|file| ... }
0424デフォルトの名無しさん
2009/12/25(金) 09:08:050425デフォルトの名無しさん
2009/12/25(金) 09:21:570426デフォルトの名無しさん
2009/12/25(金) 09:54:59破壊的メソッドが使える状況なのに気づかなかった初心者がいてもおかしくないし
役に立たないならスルーすればいい
回答者にエスパーを要求するっていうのはそういうことだと思う
0427デフォルトの名無しさん
2009/12/25(金) 12:03:27複数行のメソッドチェーンのピリオド位置をそろえられるらしい
if とか class とか直後に識別子や式が必須のところは改行しても行が継続するとか
そういう行継続のルールってマニュアルあるの?
0428デフォルトの名無しさん
2009/12/25(金) 12:16:41「改行までの箇所を読んで完結していると見なされる(パースできる)ことがないなら改行OK」
に追加されたのは「メソッド呼び出しのピリオドの前もOK」だけのはず。
0429デフォルトの名無しさん
2009/12/25(金) 12:18:40class Hoge
で改行が許されるのは説明できないのか。
0430デフォルトの名無しさん
2009/12/25(金) 15:44:18ん? 説明できてるように思うけど
class Hoge って end で閉じるまで完結しないでしょ
0431デフォルトの名無しさん
2009/12/25(金) 16:16:30puts 1+
2
これは3と出る。+がまだ完結していないから2までがまとまって解釈される。
puts(1+
+2)
同じく3。
puts 1
+2
これは1までで完結しているから1と出て、+2は単項演算して捨てられる。
puts(1
+2)
これは unexpected tINTEGER, expecting ')'
次の行まで見て完結させてくれないのはどうして?
0432デフォルトの名無しさん
2009/12/25(金) 16:22:470433デフォルトの名無しさん
2009/12/25(金) 16:57:33パーサには puts (1 2) と見えてる(+ は単項演算子と解釈されてる)
puts (1
+ 2)
だといけるかなと思ったが syntax error, unexpected '+', expecting ')' だった
ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
0434デフォルトの名無しさん
2009/12/25(金) 19:49:28> +2
> これは1までで完結しているから1と出て、+2は単項演算して捨てられる。
↑ここまできたら
> puts(1
> +2)
これは駄目ってわかりそうなもんだろw
0435デフォルトの名無しさん
2009/12/25(金) 20:00:39kwsk
0436デフォルトの名無しさん
2009/12/25(金) 20:05:56+2)
0437デフォルトの名無しさん
2009/12/25(金) 20:08:58どうして?
>>436
解決法を求めてるわけじゃないぜ。
0438デフォルトの名無しさん
2009/12/25(金) 20:30:44(1 と書くと1は完結した式と解釈され、次の行には残りの)しか書けない
ってことでok?
0439デフォルトの名無しさん
2009/12/25(金) 20:42:13'('が出て来たら')'の直前までを式と解釈してくれても良さそうなもんだが
0440デフォルトの名無しさん
2009/12/25(金) 21:15:20>>437
puts 1
+2
が駄目なので、演算子を行末におかない場合は次行と連結されないため、式として認識しない、までは認識できるだろう。
なので、次の
puts (1
の時点で次行とは連結されないでその行までで解釈される、と考えられるので、
閉じ括弧がその行にないのでエラーとなる、と
そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、
もしくは俺が長い行を複数行に分割するのに慣れすぎているのでそう感じてしまうだけかw
0441デフォルトの名無しさん
2009/12/25(金) 21:24:09+ 4)) # => 4
とかRubyって面白いね
0442デフォルトの名無しさん
2009/12/25(金) 21:29:45>>441はどういうことなの?
0443デフォルトの名無しさん
2009/12/25(金) 21:42:32ここ初心者スレなんですけど
0444デフォルトの名無しさん
2009/12/25(金) 23:05:02初心者にも有益な話題じゃない?
式が完結してしまうところで不用意に改行して構文エラーも出なくて
なんでうまく動かないんだみたいな落とし穴を回避するにはこういう知識も必要
0445デフォルトの名無しさん
2009/12/25(金) 23:06:30改行が有効な個々の場合を記憶する理由はない
0446デフォルトの名無しさん
2009/12/25(金) 23:08:31妙なところで改行打つような真似もしないだろう
0447デフォルトの名無しさん
2009/12/25(金) 23:12:130448デフォルトの名無しさん
2009/12/25(金) 23:14:120449デフォルトの名無しさん
2009/12/25(金) 23:54:41puts((3;+4))
と同じ
0450デフォルトの名無しさん
2009/12/26(土) 00:29:37>>443は>>440に対して
初心者スレで何で
>そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、
なこと言うのってことだ
0451デフォルトの名無しさん
2009/12/26(土) 00:34:38puts((3;+4))は通るのは何で?
0452デフォルトの名無しさん
2009/12/26(土) 02:20:30引数部に”;”があるのはおかしいからエラー
後者、(3;+4)は4に等しいから、
puts(4)と同じ。もちろん文法的に正しい
0453デフォルトの名無しさん
2009/12/26(土) 02:43:200454デフォルトの名無しさん
2009/12/26(土) 04:56:340455デフォルトの名無しさん
2009/12/26(土) 07:52:07引数を括る括弧と、式としての括弧は別
0456デフォルトの名無しさん
2009/12/26(土) 21:00:18include して使われることが想定されているモジュールを書いているのですが
非公開の下請けメソッドの扱いについて悩んでいます。
include先で名前の衝突が起こらないようにするため、以下の方法を考えたのですが……
1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
2、モジュールメソッドにしちゃう → 非公開じゃなくなるw
3、モジュール内部に Privateモジュールを作り、Private.method でアクセス
→ Privateモジュール自体は非公開にできないけど、includeする側からアクセス
されることはまずないだろう
他にもっとよい方法というか、こういう場合のイディオム、定石のようなものが
あったら教えて欲しいです。
0457デフォルトの名無しさん
2009/12/26(土) 22:19:29実用上は
>1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
で十分。それでも心配なら接尾辞もつけるといい。
(もちろん衝突しやすい接頭辞は避けてね)
0458456
2009/12/27(日) 08:57:11わかりました。接頭辞をつけておくことにします。
あまり長すぎるとうるさくなるんで、
アンダースコア+モジュール名を3文字くらいに圧縮したもの ぐらいでいいかな。
0459デフォルトの名無しさん
2009/12/27(日) 09:43:27個人的には3かな、Hoge::Utilsとか
0460デフォルトの名無しさん
2009/12/27(日) 11:37:54>1、適当な接頭辞をつける → 衝突はしにくくなるけどしないとは言えないw
スクリプト言語は変数の型についてはいいかげんだし、カプセル化についてだけ厳密性を求めてもしょうがないと思う。
もともとそういう言語じゃないんだよ、スクリプト言語は。
接頭辞や接尾辞をつけるだけでは衝突する可能性はゼロにできないけど、実用上は問題ないから、それでよしとしてください。
0461456
2009/12/27(日) 17:37:52> インスタンスメソッドである必要がないなら非公開にする必要もないと思うんだけど
> 個人的には3かな、Hoge::Utilsとか
Helpers とかもそうですね。
外部から利用しても役に立ちそうなメソッドなら積極的にそうすべきかも
>>460
> カプセル化についてだけ厳密性を求めてもしょうがないと思う。
> もともとそういう言語じゃないんだよ、スクリプト言語は。
そういうもんですか。
サブクラスに対して閉じるアクセス制御って今後もできないんですかね
0462デフォルトの名無しさん
2009/12/28(月) 01:40:43たぶんRubyでのprivateを勘違いしている。
Javaと違うから、マニュアルを読むことをお勧めする。
0463デフォルトの名無しさん
2009/12/28(月) 04:42:17ttp://www.rubyist.net/~matz/20070208.html#p04
0464デフォルトの名無しさん
2009/12/28(月) 06:26:05名前の衝突を懸念している時点で勘違いはしてないと思うのだが
0465デフォルトの名無しさん
2009/12/28(月) 12:17:10「サブクラスに対して閉じるアクセス制御」と言ってる時点で勘違いしてると思う。
0466デフォルトの名無しさん
2009/12/28(月) 12:41:290467デフォルトの名無しさん
2009/12/28(月) 12:45:35可視性を決めるだけ
0468デフォルトの名無しさん
2009/12/28(月) 16:09:11不要です。
以上。
↓はい次の方。
0469デフォルトの名無しさん
2009/12/28(月) 16:12:49↓ 再オープンできる時点で制御も何もねえよ
↓
0470デフォルトの名無しさん
2009/12/28(月) 18:21:240471デフォルトの名無しさん
2009/12/28(月) 20:04:43勘違いしてるとか不要とか諦めろとかどーゆー事よ
質問者の方がよっぽどrubyの事を理解してると思うわ
0472デフォルトの名無しさん
2009/12/28(月) 20:07:14サブクラスで気をつけれ
っていうに決まってそう
0473デフォルトの名無しさん
2009/12/28(月) 20:15:49だからシステム的にできねえって
新しいRuby実装を自分で作れば無論可能だが、そういう回答を求めているわけではあるまい
0474デフォルトの名無しさん
2009/12/28(月) 20:18:15じゃあ、おまいが答えれ
0475デフォルトの名無しさん
2009/12/28(月) 20:57:46set_position x, y, z
get_positionX
みたいなget,set関数を作りました。
setはともかくgetはつけずに
positionX
の方が良いですか。どちらがよりRubyっぽいか教えてください
0476デフォルトの名無しさん
2009/12/28(月) 21:00:260477デフォルトの名無しさん
2009/12/28(月) 21:06:09puts ziki.position_x
ですか???
そっちの方がRubyっぽいならそれでも良いです
0478デフォルトの名無しさん
2009/12/28(月) 21:20:17AとBについてどちらが良いですか?
A:
(1) my.position = [1,2,3]
(2) my.set_position 1, 2, 3
B:
(1) puts my.position // 配列
(2) puts my.position_x
0479デフォルトの名無しさん
2009/12/28(月) 21:39:37[x, y, z] の組が頻出なら Struct を使ってもいいかも
Point = Struct.new(:x, :y, :z)
my.position = Point.new(x, y, z)
my.position.x
0480デフォルトの名無しさん
2009/12/28(月) 21:48:58attr_accessor, attr_writer, attr_reader とかは知ってる?
0481デフォルトの名無しさん
2009/12/28(月) 22:07:20class My
attr_reader :position
def initialize ; @position = Point.new ; end
def position=(xyz)
@position.x,@position.y,@position.z = xyz # 要引数チェック
end
end
my = My.new
my.position = [0,0,0]
pos = my.position
my.position.x = pos.x + 1
0482デフォルトの名無しさん
2009/12/28(月) 22:09:560483478
2009/12/28(月) 22:11:56初心者には理解できません。
0484デフォルトの名無しさん
2009/12/28(月) 22:15:23お前は永遠に配列の添字アクセスでもやってろ
0485デフォルトの名無しさん
2009/12/28(月) 22:23:190486デフォルトの名無しさん
2009/12/28(月) 22:27:43>>481 を見て具体的に何が理解できないか書いた方がよいと思われ
0487デフォルトの名無しさん
2009/12/29(火) 08:24:31Javaの人は引数にハッシュを使うことを理解できません
Struct使う人間の95%がRubyをJavaと勘違いして使っています
0488デフォルトの名無しさん
2009/12/29(火) 08:53:28[1,2,3] * [2,2,2] = [2,4,6] と書ける裏技無いですか。
ようは2つの配列を要素毎掛け合わせて欲しい
0489デフォルトの名無しさん
2009/12/29(火) 09:02:39とくにないです
require 'enumerator'
a1 = [1, 2, 3]
a2 = [10, 20, 30]
p a1.enum_with_index.map{|e,i| e*a2[i]} #=> [10, 40, 90]
0490デフォルトの名無しさん
2009/12/29(火) 09:04:25class Array
def * other
m = []
each_index{|i| m << self[i] * other[i]}
m
end
end
裏技だからね。既存の Array#* を使ってるコードがどっかにあって
何が起きても知らないよ。
0491デフォルトの名無しさん
2009/12/29(火) 09:36:100492488
2009/12/29(火) 09:38:30いやそれはちょっと……
>>489
うーん、やっぱり無理そうですね。
C++みたいに Array& operator* (const Array& a1, const Array& a2) が定義できると便利なのに
0493デフォルトの名無しさん
2009/12/29(火) 12:49:27a2 = [10, 20, 30]
p a1.zip(a2).inject([]){|r,(x,y)| r << x*y}
とか
0494デフォルトの名無しさん
2009/12/29(火) 12:53:15配列とかでいいんじゃねえの
組として外部に持ち出さなければならないなら
クラスか何か作って名前付けることをそのときに考える
0495デフォルトの名無しさん
2009/12/29(火) 16:42:100496デフォルトの名無しさん
2009/12/29(火) 16:44:38そらできる。
0497デフォルトの名無しさん
2009/12/29(火) 16:45:55end
と同様に
def foo<<
end
を定義するとコンパイルエラーになるのですが、もしかしてこれはダメなんでしょうか。
その場合はどうすれば???
0498デフォルトの名無しさん
2009/12/29(火) 17:07:16obj.foo = ...
のような式のために特別に許されている。
(foo に代入するためには、obj.foo ではなく obj そのものを呼び出す必要があるため)
obj.foo << のような式は、obj.foo の << の呼び出しと解釈されるので、
そういうようなメソッド名はない。
ていうかどういうことがしたいわけ?
0499デフォルトの名無しさん
2009/12/29(火) 18:15:34obj.foo << # 追加
がやりたいです。
fooは仮想的な配列でメンバー変数ではありません。
0500デフォルトの名無しさん
2009/12/29(火) 18:22:31obj.foo は obj.foo() というメソッド呼び出し(が返す値の参照)です。
obj.foo() を定義して、それが返すオブジェクトの << メソッドでなんとかするしかないと思います。
0501デフォルトの名無しさん
2009/12/29(火) 18:41:190502デフォルトの名無しさん
2009/12/29(火) 19:17:45みたいな使い分けで引っかかるのは理解する
>>495
あまり楽しくない
0503デフォルトの名無しさん
2009/12/29(火) 19:22:20Runとかやって、スクリプトが動いても
なんかな、って感じになりそう
0504デフォルトの名無しさん
2009/12/30(水) 02:54:55もしかして: Aptana
0505デフォルトの名無しさん
2009/12/30(水) 11:17:47ActiveRecordのhas_many関連がありますな。
.classですらArrayと返ってくる徹底ぶり。
0506デフォルトの名無しさん
2009/12/30(水) 15:20:41end
を定義して
bar.foo = 1,2,3
と呼び出すと
./main.rb:25:in `foo=': wrong number of arguments (1 for 3) (ArgumentError)
というエラーが出るのですが、なぜ引数3つで呼び出しているのに引数の数が間違えている(1?)とか
うちのRuby様はふざけた事を言い出すのでしょうか
0507デフォルトの名無しさん
2009/12/30(水) 17:09:05bar.foo=(a, b, c) で呼び出してください。
0508デフォルトの名無しさん
2009/12/30(水) 17:12:48bar.foo=(1, 2, 3)
末尾= の場合は引数1つに限定かしらね?
bar.foo=[1, 2, 3]は
wrong number of arguments (1 for 3) (ArgumentError)
0509デフォルトの名無しさん
2009/12/30(水) 17:49:08たぶん>>508が言うように末尾=の場合は引数1個限定だと思う
けど自信ない
0510デフォルトの名無しさん
2009/12/30(水) 21:46:36plus = "a".method(:+) #=> #<Method: String#+>
p plus.("b") #=> "ab"
この3行目のシンタックスについてparse.y以外でどこかにドキュメントありませんか?
Method.instance_methodsにそれらしきメソッドが見当たらないのですが,Methodオブジェクトに特有なものなのでしょうか?
0511デフォルトの名無しさん
2009/12/30(水) 22:47:00ttp://jp.rubyist.net/?NEWS-1.9.1.ja の「言語の中核部分」→「新しい文法と意味論」
「.()で#callや#[]を使わずにProcなどを呼べる」
0512デフォルトの名無しさん
2009/12/30(水) 22:47:50Procでも使える。
0513デフォルトの名無しさん
2009/12/31(木) 01:32:23やはり、呼び出すときには引数が一つしか取れないのだろうか?
でも、定義では3つの引数が必要なので、引数の数が合わないと怒られる
bar.send( :foo=, 1,2,3 )
で、引数三つ与えて呼び出せないこともないけど
なんだか、無意味な感じ
0514デフォルトの名無しさん
2009/12/31(木) 06:56:22@37signals is already running a few minor apps on Rails 3. We've just started playing w/ porting Basecamp. Exciting times!
http://twitter.com/dhh/status/7208264678
Very tentative target date for Rails 3 beta is end of January. But core is staffed with volunteers, so very much subject to change.
http://twitter.com/dhh/status/7107817801
0515デフォルトの名無しさん
2009/12/31(木) 08:32:35http://twitter.com/dhh/status/7208225785
dhh
0516デフォルトの名無しさん
2009/12/31(木) 09:12:32なるほど。
指摘していただいたドキュメントも拝見いたしました。
#callをできるだけ通常のメソッド呼び出しの記法に近づけるため
#[]をオーバーライドするといった努力をしているというのは
耳にしたことがあったのですが,.()もその一環のようですね。
ありがとうございました。
0517デフォルトの名無しさん
2009/12/31(木) 22:42:29どうすればいいんでしたっけ?
オプションでsを指定すればよかったような気がしたのですが、
p /hogehoge/s.encoding
で#<Encoding:Windows-31J>が帰ってきます。
WindowsXPで
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32]
です。
よろしくお願いします。
0518デフォルトの名無しさん
2009/12/31(木) 23:39:430519デフォルトの名無しさん
2010/01/01(金) 07:30:44>>518
/\p{ASCII}/ という表現を使いたいのでその手法は難しいんです。
今回は関係ありませんが/\x82\xA0/
という表現もその手法だと難しいですね。
マジコメでソースエンコーディングをsjisに指定するって手もあるのですが、
大人の事情でこの手法も避けたいのです。
ハチドリ本を読み返したのですが、p.335には"SJISは、s"って書いてありますね。
なんだかなぁ。
引き続きよろしくお願いします。
0520デフォルトの名無しさん
2010/01/01(金) 08:14:35もっとスマートな方法があればいいと思うのですが、とりあえず解決です。
お騒がせしました。
0521デフォルトの名無しさん
2010/01/01(金) 14:23:19が一番綺麗だと思う。
SJISでしないといけない理由は実はなかったりしないかい?
0522デフォルトの名無しさん
2010/01/01(金) 21:58:59./configure --prefix=/usr/local
make
sudo make install
でインストールしたのを、事情によりきれいさっぱり削除したいです。
0523デフォルトの名無しさん
2010/01/01(金) 22:45:28特に手段は用意されてない
make -n installでファイルリストを作ってぶん回すぐらいしか思いつかないな
0524デフォルトの名無しさん
2010/01/02(土) 02:18:44まだRubyの問題なのか、OSの問題なのかも上手く切り分け出来ていません。 m(__)m
TCPでクライアントと通信するプログラムを作っています。
環境はサーバー側(作っている側)がDebian Lenny(5.03)で、文字コードはUTF-8です。
クライアントはWindows2000のマシンで、文字コードはShift JISです。
コードは次のような感じです。
他にも色々な処理が入っていますが、話を簡単にするため、コードを思いっきり削っています。
> hoge.rb
#! /usr/bin/ruby -Ku
while receive = STDIN.gets
# コマンドを受信した
msg = "受信しました" # UTF-8
# 送信処理
# STDOUT.puts( NKF.nkf('-Ws', msg)) # これだとWindows側にパケットが全く返らない
STDOUT.puts( msg) # これだとWindows側で漢字は化けるけどパケットは返る
end
というような感じです。
何かパケットが来たら、メッセージを返すものです。
(実際にはPostgreSQLを呼び出し、コマンドの結果を得て返しています。)
0525524
2010/01/02(土) 02:19:24inetd.confはこんな感じ。
4142 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/hoge.rb
Rubyで扱っているUTF-8の日本語文字列を、標準ストリームにShift JISで流したいだけなのですが、上手くいきません。
Shift JISで出力しようとすると、STDOUTするところで、何事も無かったかのようにパケットが送信されません。
Rubyはエラーにもならず、その行を飛ばしたかのような挙動になります。
UTF-8のままでSTDOUTへ出力すると、Windows側で文字化けしますが、パケットは返ります。
事情により、Windows側のプログラムには手を入れられません。
どこらあたりから、見直していけば良いでしょうか?
この件の調査修正で、お正月休みも返上です。(TT)
よろしくお願いします。
0526524
2010/01/02(土) 02:48:40Rubyのバージョンは1.8.7です。
よろしくお願いします。
0527デフォルトの名無しさん
2010/01/02(土) 04:37:19STDOUT.puts(msg.tosjis)
0528524
2010/01/02(土) 12:29:54ありがとうございます、しかし状況変わらずです。
NKFとkconvは、挙動が違うのでしょうか??
0529524
2010/01/02(土) 12:53:11再び524です。
申し訳ありません、確認が足りませんでした。
このmsgには”人の名 ”(漢字3文字+空白14)というように、
ASCIIで20Byte毎に区切って送るという仕様です。
ですが、Windows側には”人の名 ”(漢字3文字+空白11文字)として
届いていて構文チェックで跳ねられていました。
ちょうど空白が漢字の文字数分足りません。
UTF-8からShift JISに変換する時に、漢字とスペースの扱いはどうなるのでしょうか?
何か、特別な処理が必要でしょうか?
以前、EUC-JPとShiftJISでやったときは、問題無かったのですが。
なんとなく光が見えてきました、引き続きよろしくお願いします。
0530デフォルトの名無しさん
2010/01/02(土) 13:25:360531デフォルトの名無しさん
2010/01/02(土) 15:32:50utf8では漢字は2バイトではなく3バイト。
http://ja.wikipedia.org/wiki/UTF-8
0532524
2010/01/02(土) 17:35:34ありがとうございます、解決しました。
結局、SJISに変換してから加工するようにコードを変えました。
UTF-8では、漢字は3バイトなんですね。
勉強になりました。
お騒がせしました。
0533524
2010/01/02(土) 22:50:27524です、今、デバッグを終えて、正常動作を確認しました。
決め手は>>532さんの「漢字は3バイト」でしたが、結構ポカミスもしてまして、今まで掛かりました。
ごめんね、プロジェクトの規模が大きすぎて、コードは晒せないの…
某自動車会社で、国土交通省に提出する書類を作成するためのシステムです。
Rubyの案件としては、中くらいの規模なんじゃないかな。
わりと重要なシステムで、止まると車が作れません。
Rubyはミッションクリティカルでも大丈夫、信頼が置けます。
pgsqlだったかな、DBIになる前の古いやつ。
それからDBIへの移植だったのですが、なかなか…
pgsqlでEUC-JPだから動いてたっていうコードが結構あって、
思っていたより全然はまりました。
何処へ質問を投げようかと思案したのですが、おまいらに聞くのが一番良い気がして
ここに書かせて貰いました。
あとは1月4日の総合テストを待つのみです。
実際に車を測定する設備が無いので、うちの社内では完全なテストは出来ないんですよ。
何はともあれ、おまいらのお陰で解決しました。
本当にありがとう。
それでは、名無しに戻ります。 m(__)m
0534デフォルトの名無しさん
2010/01/03(日) 00:12:17身元と案件を特定出来る情報を2chに書くなよ・・・
0536デフォルトの名無しさん
2010/01/03(日) 00:25:56kwsk
0537デフォルトの名無しさん
2010/01/03(日) 02:32:440538デフォルトの名無しさん
2010/01/03(日) 04:20:45WEBrickでプロキシサーバを作って遊ぶ
ttp://jp.rubyist.net/magazine/?0002-WEBrickProxy
を参考に
require 'webrick'
require 'webrick/httpproxy'
s = WEBrick::HTTPProxyServer.new(
:BindAddress => '127.0.0.1',
:Port => 8080,
:Logger => WEBrick::Log::new(nil, WEBrick::Log::DEBUG),
:ProxyVia => false
)
Signal.trap('INT') do
s.shutdown
end
s.start
と書いて実験してみたところ
リモートからのデータをいったんメモリに貯めてからクライアントへ渡す動作をするようです
この場合巨大なファイル(結構大きいファイルを扱うProxyを作る予定です)を通したときにメモリ消費が
洒落にならないので、読み込んだデータから逐次クライアントへ渡すような動作にしたいのですが
そのような設定は可能ですか?可能であればその方法を教えてください。よろしくお願いします
0539デフォルトの名無しさん
2010/01/03(日) 04:50:47python -i
と同じことをする方法を見たのですが、どうやるんでしたっけ?
0540デフォルトの名無しさん
2010/01/03(日) 04:57:190541デフォルトの名無しさん
2010/01/03(日) 05:17:07違う。
0542デフォルトの名無しさん
2010/01/03(日) 09:50:24ruby -v #=> ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mingw32]
以下の簡易wget風ワンライナをより短くできませんか?
ruby -ropen-uri -e"$><<URI(*$*).read" http://www.example.com/>output
ruby -ropen-uri -e"$>.binmode<<URI(*$*).read" http://www.example.com/hoge.zip>output
短くならなければ「短くならないよ」というご意見や
よりスマートな代替案もいただけたら幸いです。
0543デフォルトの名無しさん
2010/01/03(日) 10:07:26代替案ということはワンライナにこだわらなくていいんだよね?
若干強引だけどlib/site_rubyにwget.rbライブラリを作ってそのなかに処理書いちゃうとか
ruby -rwget http://www.example.com/ > output
irb.batのようにbinにbat置いてスクリプト実行するとか
rwget http://www.example.com/ > output
0544デフォルトの名無しさん
2010/01/03(日) 10:20:40早速のレスありがとうございます。
ライブラリ案・バッチ案は個人で使う分にはアリですね。
コマンドもすっきりしますし。
個人的には何もライブラリやファイルをインストール(作成)せずに
Ruby単体で簡易wgetを実現できればいいなと思っています。
あまり実用的な場面はありませんが ^^;
0545デフォルトの名無しさん
2010/01/03(日) 10:44:08データをストリーミング中継したいということでしょうか?
私はネットワークプログラミングに詳しいわけではないのでアドバイスはできませんが,
googleで "webrick ストリーミング" で検索してみてください。
1件目のブログが参考になるかもしれません。
0546デフォルトの名無しさん
2010/01/03(日) 12:22:32対話型debugが目的なら -rdebug
対話型インターフェイスが目的なら
while true
print ">"
input = $stdin.gets.rstrip
break if input == "\x04" # ^D
puts input
end
もしくは(GNU Readlineが必要)
require "readline"
while input = Readline.readline(">")
puts input
end
pythonなんて知らんよ
0547デフォルトの名無しさん
2010/01/03(日) 13:21:29標準のシーングラフとかあっても良いと思うのだが……
何か無いですか?
0548538
2010/01/03(日) 13:46:23レスありがとうございます
探していた情報はまさにそれです、ストリーミングも含めて考えていました
逐次転送するような動作は不可ですか・・・(´・ω・`)
以前にsocketで似たような物を実装しようとしたことがあったけどリクエスト/レスポンスの
終了を検出する方法が判らなくて断念・・・il||li ○| ̄|_
0549デフォルトの名無しさん
2010/01/03(日) 15:32:50webrickを改造する場合にはリファレンスの以下の項が参考になるかもしれません。
Net::HTTPResponse#read_body {|str| .... }
「エンティティボディを少しづつ取得して順次ブロックに与えます。」
TCPSocketを使う場合でも
socket.gets until $_ == CRLF
でヘッダを切り離して
while data = socket.gets
...dataを料理...
end
ではダメですか?
Rubyで終端を気にする必要はなかったように思います。
他に思いつくにはヘッダのContent-Lengthを信用してそのバイト数だけ読み込むとか。
TCP/IPの規格に詳しくないので当てずっぽうですが。
0550デフォルトの名無しさん
2010/01/04(月) 01:49:17マルチスケジューリングなキッチンタイマーのようなものです。
問題がありまして、
例えば60分後にアラームを鳴らせるというタイマーのプログラムを行ったときに
やっぱりその30分前にもう一個のプログラムを追加したいと思ってもそれを行うためには
常に入力待ち状態である必要があります。
その一方で常に出力待ち状態でないと指定時刻にタイマーを実行することができません。
今は
タイマー入力(空入力も化)待機モード→
1分間のタイマー実行待機モード→
その1分の間に起こるべきイベントがあれば指定時刻にイベントを起こす→
またタイマー入力待機モードに戻る→
以下ループ
というようにユーザに入力によって待機モードを切り替えることでそれらしい動作をさせています。
どのようにすればもっとスマートにこのタイマーを実装できるでしょうか?
一つのスマートじゃない方法はテキストエディタと外部ファイルを使ってこのタイマー入力を行うことかなと思うんですが。(非排他モードでファイルの書き込み読み取りする)
forkがwindows rubyでは使えなくて、そもそも子プロセスを使ったことがないので悩んでいます。
0551デフォルトの名無しさん
2010/01/04(月) 01:57:34しょーもないソースコードですが、文章で書くより伝わりやすいと思うので
よろしくお願いします。
0552538
2010/01/04(月) 03:29:30レスありがとうございます
WEBrickはソースコードを理解するだけで時間が相当かかりそうな感じなので
改造はあきらめます・・・
バイナリデータをgetsで読み出そうとすると最悪の場合、最後まで読み込んで
しまうように思いますが・・・
Socketの終了が判らない件ですがノンブロックモードで読み出す方法
(sysreadを使う。getsが使えなくなるけど・・・)が判ったのでひとまず解消しました
普通にreadを使うとブロックモードなんで帰ってこない・・・(TT
しかし1セッションに複数のホストへのリクエストとかマンドクセ(´・ω・`)
0553デフォルトの名無しさん
2010/01/04(月) 05:32:35getsはバイト列に$/(普通は0x0A)がでてこなければ
最後まで読み込んでしまうけれど、その確率は気にするほどのものかな
ミッションクリティカルなアプリケーションならしかたないとは思うけど
0554デフォルトの名無しさん
2010/01/04(月) 06:17:44つ Thread & ConditionVariable
0555デフォルトの名無しさん
2010/01/04(月) 12:40:48例えばhttp://menu.2ch.net/bbsmenu.htmlから"pc11"が含まれるURLを抽出したいです。
require "open-uri"
url = ARGV[0] || "http://menu.2ch.net/bbsmenu.html"
uri = open(url).read
URI.extract(uri, ['http']){
|uri|
puts uri
}
URL自体を抜き出すのは比較的簡単に出来たのですが、特定のURLを抜き出すのってこの状態からどうしたらいいでしょうか?
宜しくお願いします。
0556デフォルトの名無しさん
2010/01/04(月) 13:03:470557デフォルトの名無しさん
2010/01/04(月) 13:05:12URI.extract の返値(URI の配列)に対し find_all でいいんじゃない?
str = open(url).read
URI.extract(str, ['http']).find_all {|uri| uri =~ /pc11/ }
正規表現マッチの部分はもう少し厳密にした方がいいと思うので適当に
0558557
2010/01/04(月) 13:13:580559デフォルトの名無しさん
2010/01/04(月) 13:20:49URI.extract(str, ['http']).grep(/pc11/)
0560デフォルトの名無しさん
2010/01/04(月) 20:31:50配列から特定の条件を満たす要素を抜き出す方法とか
URIオブジェクトのURI構成要素を返すメソッドは何かとか
そういうの調べていったほうがたぶん早い
0561デフォルトの名無しさん
2010/01/04(月) 20:41:170562デフォルトの名無しさん
2010/01/04(月) 20:43:13いつ動かなくなるのか不安だ。。
0563デフォルトの名無しさん
2010/01/04(月) 20:51:14普通はstr = open(url).{|io|io.read}じゃね?
それかstr = URI(uri).readか。
0564デフォルトの名無しさん
2010/01/04(月) 20:54:18require 'open-uri'
url = "http://menu.2ch.net/bbsmenu.html"
purls = URI.extract(open(url).read, ['http'])
uris = purls.map{|url| URI.parse(url)}.find_all{|uri| /\Apc11\.2ch\.net\Z/ =~ uri.host}
ただ、
「URLを抽出したあとそれに対して何をしたいのか」
「本当に抽出したいのは本文のURLではなくて<a href>のリンクなのではないか」
「貴様は次のレスで「あっあとttp://も抽出したいです」と言うッ!」
とかいうような危惧がないわけでもない
普通にHTMLパーサ通したほうが近道だったり
一般的な適当範囲の正規表現を通したほうがマシな処理だったりしなくもなくもないかも
0565デフォルトの名無しさん
2010/01/04(月) 20:56:560566デフォルトの名無しさん
2010/01/04(月) 21:00:02これがめちゃくちゃ洗練されて、2chアクセス者全員にdat直読みだけをされるようになっても
本当は運営的にはちょっと困るのよ
0567デフォルトの名無しさん
2010/01/04(月) 21:03:290568デフォルトの名無しさん
2010/01/04(月) 21:03:47APIが洗練されたとしても利用者全員がdat読みすることなんてありえんから
後半は全然関係ないだろw
0569デフォルトの名無しさん
2010/01/04(月) 21:10:00本当に洗練されたWeb経由APIはJavaScriptのみでの実装を許す
API経由で広告を見せて有効に動作させるロジックはまだ発明されていない
今の2chから広告収入外されたら傾くぞ
なんかこう物理的にナナメに傾くだけで済む気もするのがなんか謎な収益だが
0570デフォルトの名無しさん
2010/01/04(月) 21:29:00まあなんか非常にめんどくさいのだけど
open(path).read は close 忘れが多いので推奨されない書き方
(open(path){|f| f.read} を強く推奨、File.read(path) は Windows のバイナリスイッチが入らなので非推奨)
ただ、open-uri を読み込んだ URL や URI に限っては、
open(uri).read は IO#close 相当を必要としないので妥当安全にたまたま動作する
いや、ブロックつきで書いてもいいけど
っていうかレスしてて気づいたけど本当にたまたま動くんだなこれ
ローカルのファイルを読むことがなくて、簡便な HTTP アクセサとしてしか使用しないのなら
あなたの言うように URI.parse(url).read するのがいちばんではあるっていうかお前ら初心者スレで手を抜くな
0571デフォルトの名無しさん
2010/01/04(月) 22:11:39手を抜くな、と言われましても、2chの手抜きAPIに対して
真面目にプログラミングする気がしませんん。
0572デフォルトの名無しさん
2010/01/04(月) 22:16:540573デフォルトの名無しさん
2010/01/04(月) 22:19:33一時期XML吐こうぜみたいな動きがあったみたいだけど、
「やっぱだりぃわ」で自然消滅した?w
0574デフォルトの名無しさん
2010/01/04(月) 22:23:55URLにアクセスしてHTMLを取得するという根幹部分すらまともに書けませんと素直に言ったら
0575デフォルトの名無しさん
2010/01/04(月) 22:30:23は?HTTPのライブラリぐらい作ったことあるから w
0576デフォルトの名無しさん
2010/01/04(月) 22:40:14open(path)ってしただけでゴリゴリとTempfileをディスクに書いちゃうのね。
大量のURIを扱うならopenは使うべきじゃないな。
0577デフォルトの名無しさん
2010/01/05(火) 04:26:100578デフォルトの名無しさん
2010/01/05(火) 05:17:44f = open(uri) が open として何を返すべきかを考えたら、
StringIO が返ってくる低サイズ帯のほうがむしろ特殊というか変
0579デフォルトの名無しさん
2010/01/05(火) 15:25:56ziprubyもrubyzipも無圧縮オプションが見当たりません
この2つは無圧縮zipの作成をサポートしていないのでしょうか?
あるいはlibtarで作成すれば無圧縮zipと同じものが出来ますか?
0580デフォルトの名無しさん
2010/01/05(火) 19:57:040581デフォルトの名無しさん
2010/01/05(火) 22:54:32ヒント
Zlib::NO_COMPRESSION
0582デフォルトの名無しさん
2010/01/06(水) 05:24:47オレも気になったので調べてみたけど見当たらないね、実装されてないのかな?
おそらくPKZIP形式を求めていると思ったので
偽Zip32J.DLLてのを使ってやってみた
require 'dl/win32'
zip = Win32API.new("Zip32J.DLL","Zip","lppl","l")
p zip.call(0,"-q -0 out.zip 1.txt 2.txt", "" , 0)
拘り無いならtarでいいと思う
0583デフォルトの名無しさん
2010/01/06(水) 07:15:17どこ見てんのよ。
0584デフォルトの名無しさん
2010/01/06(水) 12:31:59a.sub!(/\//, "\\")
p a
これで出力は \ 1個を期待したのだけど
\\ 2個になってしまう
a.sub!(/\//, "\")
こうすると怒られるし
どうしたらいい?
0585デフォルトの名無しさん
2010/01/06(水) 12:36:25irbでinspectの結果を見てないか?
0586デフォルトの名無しさん
2010/01/06(水) 12:37:22pはinspectの結果を出すので、そうなって当然。
putsせよ。
0587デフォルトの名無しさん
2010/01/06(水) 12:40:36ttp://doc.okkez.net/187/view/method/String/i/inspect
0588デフォルトの名無しさん
2010/01/06(水) 14:25:270589デフォルトの名無しさん
2010/01/06(水) 14:38:24どうでもいいけど、個人的には正規表現に / が入るときは %r が見やすい
0591デフォルトの名無しさん
2010/01/07(木) 15:03:290592デフォルトの名無しさん
2010/01/08(金) 20:42:04窓の杜 - 【REVIEW】Windowsでスクリプト言語“Ruby”を導入するための和製インストーラー「Rumix」
http://www.forest.impress.co.jp/docs/review/20100106_340742.html
0593デフォルトの名無しさん
2010/01/08(金) 23:46:160594デフォルトの名無しさん
2010/01/08(金) 23:52:330595デフォルトの名無しさん
2010/01/09(土) 08:02:180596デフォルトの名無しさん
2010/01/09(土) 08:37:14Rumix 日本語版Windows向けRubyパッケージ
0597デフォルトの名無しさん
2010/01/09(土) 19:02:010598デフォルトの名無しさん
2010/01/09(土) 19:04:58Rubyを使わない
Rubyはメモリを多めに使うことで、Rubyであるということの意味を保っている
(そもそも言語レベルでそのように作られている)
メモリを大量に消費するということがネックなのなら、その用途にRubyを選ぶべきではない
0599デフォルトの名無しさん
2010/01/09(土) 19:20:430600デフォルトの名無しさん
2010/01/09(土) 19:33:360601デフォルトの名無しさん
2010/01/09(土) 19:35:170602デフォルトの名無しさん
2010/01/09(土) 19:44:52あれはRubyらしさとかそういうの抜きで単にミスだろう
0603デフォルトの名無しさん
2010/01/09(土) 19:52:100604デフォルトの名無しさん
2010/01/09(土) 19:54:55お前気楽な人生送ってるな
反対のことだけ書いてりゃ爽快なんだもんな
0605デフォルトの名無しさん
2010/01/09(土) 20:09:47Rubyは再度日陰になるのかね
どっちにしても初心者スレの話題じゃねーな
0606デフォルトの名無しさん
2010/01/09(土) 20:22:09exerbでexeファイル化する予定なので出来れば自動で判別したいです
0607デフォルトの名無しさん
2010/01/09(土) 20:26:19ttp://exerb.sourceforge.jp/man/doc/core.ja.html
0608デフォルトの名無しさん
2010/01/09(土) 21:14:090609デフォルトの名無しさん
2010/01/10(日) 18:15:55どなたかアドバイスお願いします
0610デフォルトの名無しさん
2010/01/10(日) 18:28:22いいからさっさと消えてくれ。目障りだ
0611sage
2010/01/10(日) 18:40:420612デフォルトの名無しさん
2010/01/10(日) 18:46:03オクにいくつかでてるんで、買おうか迷ってるので教えてください。
0613デフォルトの名無しさん
2010/01/10(日) 18:50:05古書
Rubyの過去を知るために有意義
0614デフォルトの名無しさん
2010/01/10(日) 21:30:35hamlで以下のような定義のときに、ruby本体でどのようにしたらいいのか教えてください。
%table
!= header = capture_haml do
%tr
%th Name
%th TimelogUrl
%th Status
- @users.each do |u|
%tr
%td u.name
%td u.link
!= header
この中で、@usersをどのように定義したらいいのかが分かりません。
バージョンは以下のものを使っています。
ruby 1.9.1
haml 2.2.16
0615デフォルトの名無しさん
2010/01/10(日) 23:05:34そのときのコンテキストにおける self に対して。
たとえば instance_eval { @users = ... }
0616デフォルトの名無しさん
2010/01/10(日) 23:34:52レスありがとうございます。
すいません、もう少し詳しく教えてもらえると嬉しいです。
@users = [
[
name => "aaaa",
link => "link1"
],
[
name => "bbbb",
link => "link2"
]
]
こんな感じのを想定しているんですが、全く違うようなそうでないような・・・
そんなレベルです。すいませんorz
0617デフォルトの名無しさん
2010/01/10(日) 23:43:000618デフォルトの名無しさん
2010/01/11(月) 00:03:440619デフォルトの名無しさん
2010/01/11(月) 00:16:32HTMLと画像とJavaScriptで構成されているWebアプリケーションなら
サーバを用意してサーバ上でRubyを頑張って動かせば作れないわけでもない
Flashなどを利用するタイプのは、そりゃバックグラウンドサーバでRuby動かすことはできるけど
それより先にFlashで普通に作らないといけないぞ
何の話をしてるかわからないのなら、Webアプリケーションについての概略知識が足りない
0620デフォルトの名無しさん
2010/01/11(月) 00:21:59先に書くべきだったでしょうか?
Sinatraを使ってPassenger経由で表示させようとしています。
index.hamlという名前でhamlを使って別ファイルに保存していて、それをstart.rbから読み込んで表示させようとしています。
0621デフォルトの名無しさん
2010/01/11(月) 01:29:35このページは参考になるかな(2ページ目の@comment変数)
ttp://gihyo.jp/dev/serial/01/ruby/0009
0622デフォルトの名無しさん
2010/01/11(月) 03:13:44はい。そのページは知ってるのですが、実際に定義する場合にどのようにしたらいいのか?
というところで悩んでます。
テストデータを仮に組もうとして、どう「書いたら」良いのか分からないという orz
0623デフォルトの名無しさん
2010/01/11(月) 04:12:59こんな感じか
TestData = Struct.new(:name,:link)
@users = [ TestData['aaaaa','link1'], TestData['bbbbb','link2'] ]
0624デフォルトの名無しさん
2010/01/11(月) 04:33:52ありがとうございます。
おかげさまで動きました。
ただ一つだけ修正が
>>614の所は
%td u.name
%td u.link
は
%td= u.name
%td= u.link
でしたorz
0625デフォルトの名無しさん
2010/01/11(月) 07:46:02対象スレ:Ruby 初心者スレッド Part 33
キーワード:orz
抽出レス数:7
0626デフォルトの名無しさん
2010/01/11(月) 10:39:52Ruby
0627デフォルトの名無しさん
2010/01/11(月) 12:17:24文脈によって指すものは変わる。
0628デフォルトの名無しさん
2010/01/11(月) 17:22:46同じ名前のチェックボックスから複数の値をとりだすにはどうしたら
よいのでしょうか?
require "cgi"
cgi = CGI.new
check1 = cgi["check"][0]
とかで個別には取れますが、選択できる数が固定でない場合、
どのように書けばよいのでしょう?
配列の数さえわかればできるのですが
cgi["check"].lengthとかで配列の数がとれないようですし困っています。
0629628
2010/01/11(月) 17:58:49くだらない質問してすみませんでした
0630デフォルトの名無しさん
2010/01/12(火) 04:22:000631デフォルトの名無しさん
2010/01/12(火) 18:16:46task が補完されない。Rakefile 中の全 task を補完させたいのだけど、
どうしたらいい??
0632デフォルトの名無しさん
2010/01/12(火) 18:27:460633デフォルトの名無しさん
2010/01/12(火) 18:39:02zshの設定を変える
rake専用の補完関数を書けばいい
誰かが作ってるのではないかな
0634デフォルトの名無しさん
2010/01/12(火) 18:45:55今ドラフト。
0635デフォルトの名無しさん
2010/01/12(火) 22:17:370636デフォルトの名無しさん
2010/01/12(火) 22:21:00マブダチ。
0637デフォルトの名無しさん
2010/01/12(火) 23:35:30まじ?
0638デフォルトの名無しさん
2010/01/12(火) 23:38:220639デフォルトの名無しさん
2010/01/12(火) 23:59:56http://ruby-std.netlab.jp/
0640デフォルトの名無しさん
2010/01/13(水) 00:11:14http://rb-gsl.rubyforge.org/
のWindowsバイナリってないです?
gem install gslしようとしたら、native libraryでコンパイルしようと下ので、
VC++2008環境でやってみたんですが、エラー吐いてダメポです。
どなたかコンパイルしたバイナリか、コンパイルの仕方教えてください。
mingwとかでもコンパイルできますか?
C:\Program Files\Microsoft Visual Studio 9.0\VC>gem install gsl
Building native extensions. This could take a while...
ERROR: Error installing gsl:
ERROR: Failed to build gem native extension.
C:/ruby/bin/ruby.exe extconf.rb
checking for sys/types.h... yes
checking for u_int8_t... no
checking for int16_t... no
checking for int32_t... no
checking for u_int32_t... no
creating narray_config.h
creating Makefile
nmake
(つづく)
0641デフォルトの名無しさん
2010/01/13(水) 00:12:02Microsoft(R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
cl -nologo -I. -I. -IC:/ruby/lib/ruby/1.8/i386-msw
in32 -I. -MD -Zi -O2b2xg- -G6 -DHAVE_SYS_TYPES_H -c -Tcnarray.c
cl : コマンド ライン warning D9035 : オプション 'Og-' の使用は現在推奨されていま
せん。今後のバージョンからは削除されます。
cl : コマンド ライン warning D9002 : 不明なオプション '-G6' を無視します
narray.c
c:\ruby\lib\ruby\1.8\i386-mswin32\config.h(2) : fatal erro
r C1189: #error : MSC version unmatch
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\cl.EXE"' : リターン コード '0x2'
Stop.
Gem files will remain installed in C:/ruby/lib/ruby/gems/1.8/gems/narray-0.5.9.7 for inspection.
Results logged to C:/ruby/lib/ruby/gems/1.8/gems/narray-0.5.9.7/src/gem_make.out
0642デフォルトの名無しさん
2010/01/13(水) 00:27:46cgi.rbがゴミなのでしょうか?
他に使いやすいCGIライブラリってありますか?
0643640
2010/01/13(水) 00:32:060644デフォルトの名無しさん
2010/01/13(水) 00:49:49いまのところの本命はRackやRackに基づいたもの。
0645デフォルトの名無しさん
2010/01/13(水) 01:03:24. )
,―ヽ__(__、―
,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/ RubyはIPA Rubyになったピョん☆
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||
0646デフォルトの名無しさん
2010/01/13(水) 01:24:34公式から初心者のためのRubyインストールガイドに飛んで、
<URL:http://rubyforge.org/projects/rubyinstaller/>でダウンロードできます。
に行ったところ、1.8.6と1.9.1しか見当たりません
ど初心者なので安心な公式からのリンクのインストーラを使っておきたいところなんですが
興味を持っていざ足を踏み入れてみたものの、いきなり迷子になってます
0647デフォルトの名無しさん
2010/01/13(水) 01:29:31rubyをコンパイルしたのと違うバージョンのコンパイラを使うと
ランタイムライブラリが衝突する関係上、拡張ライブラリはコンパイルできない
ただしVC6とMinGWは同じランタイム使うのでそこの互換性はあり
つーことで、>>643はrubyがVC6かMinGWでコンパイルされている条件付でyes
0648デフォルトの名無しさん
2010/01/13(水) 01:33:27そういえばOne-Click Installerって1.8.6までだったね
http://groups.google.co.jp/group/comp.lang.ruby/browse_thread/thread/3212e4e1a32d8526
>>592にあるRumixってのを試してみては
不安なら他の人のレスを待って
0649デフォルトの名無しさん
2010/01/13(水) 01:43:57ありがとうございます
教えてもらったRumix - Ruby Starter Package with Installer
でインストールして初めてみたいと思います
0650デフォルトの名無しさん
2010/01/13(水) 01:46:22とりあえず始めるにはRubyGemsつきの以下の2つをオススメしたいな
ActiveScriptRuby(ただし、少し古いので外部公開とかは注意)
COM Meets Ruby
http://arton.hp.infoseek.co.jp/indexj.html
か、>>592のRumixをどうぞ
Rumix - Ruby Starter Package with Installer
http://ruby.morphball.net/rumix/
Rumixの方は試してないからわからんが、コッチの方がRuby1.8.7でも新しい。
0651640
2010/01/13(水) 01:48:30RubyはVC6版(ActiveScriptRubyのだと思う)のはずなので、MinGWでコンパイル試してみます。
0652デフォルトの名無しさん
2010/01/13(水) 01:54:49わざわざありがとうございます
ActiveScriptRubyもチェックしてみたいと思います
0653デフォルトの名無しさん
2010/01/13(水) 06:54:520654デフォルトの名無しさん
2010/01/13(水) 07:03:58mswin32が爆弾持ち
絶対にmingwもいれて比較すべき
遅く感じないならどっちでもいい
遅くない人もいるみたいだから
0655デフォルトの名無しさん
2010/01/13(水) 07:34:04まあ教祖自身がウィンドウズ使ってないから放置なんだろうけど。
0656デフォルトの名無しさん
2010/01/13(水) 07:55:040657デフォルトの名無しさん
2010/01/13(水) 08:15:410658デフォルトの名無しさん
2010/01/13(水) 09:20:360659デフォルトの名無しさん
2010/01/13(水) 10:52:00arr.unshift(obj) と一緒だよね
ただのデータ配列なのでキュー関連の物言いを嫌ったのかね
0660デフォルトの名無しさん
2010/01/13(水) 16:12:42C言語で書くとこうなります。
float f[] = {1,2,3,4,5,6};
unsigned char* p = (unsigned char*)f;
OpenGLを使っていて頂点データをGPUに送るのに配列の生データが欲しいのですが……
0661デフォルトの名無しさん
2010/01/13(水) 16:49:47pack調べろpack
0662デフォルトの名無しさん
2010/01/13(水) 17:04:11.pack("f*")で出来た。まじサンクス。
@@vertices = [1,0,0, 0,1,0, -1,0,0].pack("f*")
@@indices = [0,1,2].pack("f*")
0663デフォルトの名無しさん
2010/01/13(水) 19:37:31すまん。レスの趣旨がつかめん。
挿入位置によってメソッド使い分ければいいじゃんてことが言いたい?
0664デフォルトの名無しさん
2010/01/14(木) 11:08:18とかそんなことだと思う
0665デフォルトの名無しさん
2010/01/14(木) 17:43:13わざわざinsert使っているのは何故なんだっていうところだろうね。
0666デフォルトの名無しさん
2010/01/14(木) 20:04:560667デフォルトの名無しさん
2010/01/14(木) 20:16:27たいていは既に報告してて対処待ち
Rubygems みたいな外部ライブラリのバグっぽい感じのものならやっぱ過去の報告とか調べて
それでもなさそうなら Rubyforge や GitHub のページのバグ報告あたりに出すといい
ただ、断言してもいいけど6割はただの勘違いで、残りのうち3割5部は既に報告済みだと思う
どこのどのへんが怪しい動作と思えるのかここで言ってみ
報告のためにはそれなりに体裁とか前提条件とか洗い出さないと対処してもらいにくいけど
ここで何か言えばそのためのヒントくらいは出るかもよ
0668デフォルトの名無しさん
2010/01/14(木) 20:20:12unshift と書いてあったら俺はキューのようなものだとみなす
キューでもないのに unshift と書いてあったらたぶんキレる
先頭に要素突っ込みたいなら insert 使え
最後に要素突っ込みたいなら << か push 使え
0669デフォルトの名無しさん
2010/01/14(木) 20:27:34まあ確かに順番必要ないのにArray使ってる例というのは結構あって
0670デフォルトの名無しさん
2010/01/14(木) 21:33:30Googleで4・50件ほど見たけど無かった。
win32でコマンドラインに特定の非ASCII文字を含むディレクトリ名を指定するとワイルドカードが展開されない
0671デフォルトの名無しさん
2010/01/14(木) 21:35:23http://redmine.ruby-lang.org/projects/ruby/issues?set_filter=1&tracker_id=1
サンプルコード見せて
0672デフォルトの名無しさん
2010/01/14(木) 22:16:49非ASCII文字の中に「表」とかの \ で終わる文字が入ってるんだろ
0673デフォルトの名無しさん
2010/01/14(木) 23:06:29http://railsbridge.org/news_items/10
0674デフォルトの名無しさん
2010/01/14(木) 23:11:49お作法的にはどっち?
0675デフォルトの名無しさん
2010/01/14(木) 23:13:46初心者のうちは全部使って長所短所欠点体に刻んどけという気はする
どうせ外に出したりしないだろ
0676デフォルトの名無しさん
2010/01/14(木) 23:15:090677デフォルトの名無しさん
2010/01/14(木) 23:15:28その「特定の非ASCII文字」が何かによって答えは変わる。
シフトJISにない文字なんじゃないかと思うが如何?
0678デフォルトの名無しさん
2010/01/15(金) 00:13:11RackやRackに基づいたもので、普通のCGIは作れるのでしょうか?
調べてみても、mod_railsとかmongrelとかの環境を作らないと
動かせないように見えるのですが...
0679デフォルトの名無しさん
2010/01/15(金) 00:20:18できる
できるが、rack/cgi はリリースされても全く動かなかったことがある
(つまり誰も本気でテストしてなかった)というヤな過去があって
つまり誰もやってないんだよね
理屈上はできるし理屈上はRackでやるとキレイなんだけど、
CGI作るということ自体がもうあまり流行らないから
0680デフォルトの名無しさん
2010/01/15(金) 00:28:29D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\本/*
["D:\\tmp\\r\\本/*"]
D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\表/*
["D:\\tmp\\r\\表/*"]
D:\tmp\r>ruby -e "p ARGV" D:\tmp\r\漢/*
["D:/tmp/r/漢/新規テキスト ドキュメント.txt"]
漢字の2バイト目が\とか{とか
0681デフォルトの名無しさん
2010/01/15(金) 02:40:121.8.7p160だと問題なかった
pの出力で日本語が出てることをみると1.9系だと思うが
1.9.1p243だと >>680 と同じ状態
Dir.glob に渡した時はちゃんと展開されるが
コマンドライン引数を展開する時はダメなんだね
UNIXだとコマンドライン引数のワイルドカードはシェルが展開するから、開発者には気付かれにくいのだろう
昔の1.8は Dir.glob自体がSJISに完全対応してなくて、コマンドライン引数にも同様の不具合があったけど
今回のはコマンドライン引数の時だけの不具合なのか
0682デフォルトの名無しさん
2010/01/15(金) 03:16:56for i in 0..9
quest_number = rand(10)
@select_quests |= quest_number.to_a if select_quests_flag(quest_number)
end
end
def select_quests_flag(index)
return false if @select_quests.include?(index) #・・・�@
return true
end
�@で@select_questsに同じ要素が入っている場合falseを返す様にしたいのですが
この場合include?(val)メソッドしかないですよね?
なんかうまく動かないんですがどこか間違ってますか?
0683デフォルトの名無しさん
2010/01/15(金) 03:29:47@select_quests << quest_number if select_quests_flag(quest_number)
かな
0684デフォルトの名無しさん
2010/01/15(金) 04:05:24え、うそ!!!1
RubyGemsが遅いのってmswin32版のせいなの???
くっそー今まで散々苦労してきたのにー
確かにcoLinuxとかだとめっちゃ早いと思ってたわ。
mingw版だと早い?、とか
0685デフォルトの名無しさん
2010/01/15(金) 06:38:43サーバ側でバージョンが古いと怒って欲しい
0686デフォルトの名無しさん
2010/01/15(金) 07:35:58おう、そういう機能入れたから、rubygem をアップデートしてくれ
というわけで鶏と卵だ
0687デフォルトの名無しさん
2010/01/15(金) 07:43:14def initialize
@select_quests = Array.new
...
end
def set_select_quests
(0..9).each.do |i|
quest_number = rand(10)
# @select_quests に quests_number が含まれてなかった場合追加する
@select_quests << quest_number if @select_quests.include?(quest_number)
end
end
0688デフォルトの名無しさん
2010/01/15(金) 08:06:580689デフォルトの名無しさん
2010/01/15(金) 20:25:24ずーと前からみたいだけど直すきないの?
0690デフォルトの名無しさん
2010/01/15(金) 20:28:450691デフォルトの名無しさん
2010/01/15(金) 20:29:00なんでWindozeを使ってるの?
LinuxやBSDやSolaris使えばいいだけじゃないの?
文句言ってるだけで何も行動しようとしないのはなんでなの?
0692682
2010/01/15(金) 20:46:00うまくいきました
0693デフォルトの名無しさん
2010/01/15(金) 20:46:26めんどくさいから
いやマジで
誰にでも絶対に起こるなら直されると思うんだが実際はそうではない
0695デフォルトの名無しさん
2010/01/15(金) 20:55:02だよね
むしろ嫌がらせっぽい
0696デフォルトの名無しさん
2010/01/15(金) 21:26:17既存のクラスにメソッド追加したり、injectとかがちょっと使いづらい以外不満はない。
0697sage
2010/01/15(金) 21:29:39len() とか気持ち悪い。
0698デフォルトの名無しさん
2010/01/15(金) 21:37:14最初はそう思ってたけど慣れればそんなもんかって思えるよ。
あとは、三項演算子やcase文がないのがちょっと残念くらいなもんか。
0699デフォルトの名無しさん
2010/01/15(金) 21:38:39Rubyも「+」とか「end」はオブジェクトじゃないよね
0700デフォルトの名無しさん
2010/01/15(金) 21:41:20不完全性定理というのがあってだな
0701デフォルトの名無しさん
2010/01/15(金) 22:19:11x = "ABCDEFGHIJKLMNOPQRSTUVWXY"
x = x.scan(/.{5}/)
x.collect!{|y|y.scan(/./)}
p x
=>[["A","B","C","D","E"],["F","G","H","I","J"],["K","L","M","N","O"],["P","Q","R","S","T"],["U","V","W","X","Y"]]
みたいに書くと都度、正規表現によるマッチが行われるので遅いです
もっと高速に実行する方法があったら教えてください。よろしくお願いします
0702デフォルトの名無しさん
2010/01/15(金) 22:20:42オブジェクト指向の純粋さなんてどうでもいいわ
0703デフォルトの名無しさん
2010/01/15(金) 22:31:44x.chars.each_slice(5).to_a とか。
Benchmark.bm で1万回ずつやった時間を比較したら半分弱の時間だった。
0704デフォルトの名無しさん
2010/01/15(金) 22:37:37x.split(/.{5}/)
x.split(//)
がたぶん一番速い
これでも遅いという場合はそもそもそんな莫大な配列を文字から作る理由は何というとこから
0705デフォルトの名無しさん
2010/01/15(金) 23:10:56そもそも要件を全然満たしてない件
0706デフォルトの名無しさん
2010/01/15(金) 23:17:57なんとなく大体同じもののように思えるんですが
0707デフォルトの名無しさん
2010/01/15(金) 23:42:36覚えていなくてもいいぞ。
alphabets = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z)
alphabets.combination(13).first(5) は造作もないが
alphabets.combination(13).to_a.first(5) はたぶんメモリ足りない。
0708デフォルトの名無しさん
2010/01/16(土) 00:46:48数えられて、返ってくる順番が保証されないのがEnumerator
Enumeratorを継承してるので数えられて、しかも順番情報を保持するようにしたのがArray
こう考えるとSetの出番がないんだがまあ誰も覚えてないし誰も使ってないと思うので気にするな
0709デフォルトの名無しさん
2010/01/16(土) 12:34:07シングルバイト文字限定でいいのかな?
であれば
x = "ABCDEFGHIJKLMNOPQRSTUVWXY"
res = [[]]
x.each_byte do |b|
if res[-1] < 5
res[-1] << b.chr
else
res << []
end
end
で,どうでしょう?
0710デフォルトの名無しさん
2010/01/16(土) 14:39:59以下のコードはなにか間違っていますでしょうか?
# coding: cp932
p "日本語" =~ /\w/s #=> nil
鬼車のドキュメントには\wは多バイト文字にマッチすると書かれているのですが。
ttp://www.geocities.jp/kosako3/oniguruma/HISTORY_5X.txt
0711デフォルトの名無しさん
2010/01/16(土) 14:44:551.9 でもそうなってる。
0712デフォルトの名無しさん
2010/01/16(土) 14:51:19Thanksです。
マルチバイト文字を含めた単語構成文字にマッチするナイスな正規表現ってありませんか?
あとドキュメントのURLが間違ってました。
ttp://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
0713710
2010/01/16(土) 14:58:14# coding: cp932
"日本語" =~ /\p{Word}/s
でいけました。
0714デフォルトの名無しさん
2010/01/16(土) 15:02:56その種のは使い分けるようになったんだっけ?
0715デフォルトの名無しさん
2010/01/16(土) 17:22:031.9系なら↓でマルチバイトもOK
x = 'あいうえおかきくけこさしすせそ'
res = []
x.each_char.each_slice(5){|a| res << a}
0716デフォルトの名無しさん
2010/01/16(土) 17:29:26x = 'あいうえおかきくけこさしすせそ'.each_char.each_slice(5).map{|a| a}
0717デフォルトの名無しさん
2010/01/16(土) 17:32:170718デフォルトの名無しさん
2010/01/16(土) 17:33:00ありません
0719デフォルトの名無しさん
2010/01/16(土) 17:38:28そういうライブラリがrubygemsあたりにでもないかという話だろう
でもこれで困るの日本人とかだからなー
0721デフォルトの名無しさん
2010/01/17(日) 10:37:45やっぱり、Emacs or vim?
補完が効くのが良いのですが・・・・
0722デフォルトの名無しさん
2010/01/17(日) 10:48:27適当な統合環境が快適に動作する環境なのなら、エディタ部のコード書きの補完機能だけ使うのも悪くはない
Emacsを一度も使ったことがなくて基本キー操作から覚えなければならないというのだとすれば尚更
Emacsが好まれてるのはエディタの軽さの範疇を実際上は超えてないというのが大きい
もしEclipseやNetBeansが超サクサク動作だったならEmacsは時代遅れ度を2段階くらい上げていたはず
0723デフォルトの名無しさん
2010/01/17(日) 11:02:32…まあ、実用上はそれほど困らないが
0724デフォルトの名無しさん
2010/01/17(日) 11:35:27感謝の意を込めてちゃんと送金したでござる。
0725デフォルトの名無しさん
2010/01/17(日) 11:35:480726デフォルトの名無しさん
2010/01/17(日) 11:46:52主にNetBeans使ってる。IDE厨なのでw
ただし、NetBeansの最新の6.8はいろいろとバグが・・・
0727デフォルトの名無しさん
2010/01/17(日) 11:57:45でもたしかにIDEがエディタ同様に軽ければそっち使うかも
0728デフォルトの名無しさん
2010/01/17(日) 12:36:38IDEはおおむね重いし遅いしプロジェクトとかそんなのが必要な大作ばかり作るわけじゃないから邪魔
というところにすこんと入るのがEmacs
全部できるが余分で煩雑で重い、というものを使うよりは、
やや足りなくて手作業が入るが軽快、のほうを選ぶ人は意外と多い
0729デフォルトの名無しさん
2010/01/17(日) 13:17:32全体を整形&フィリング(emacsではこういうのかな)できる設定ないかしら。
0730デフォルトの名無しさん
2010/01/17(日) 13:20:51俺はCtrl-x hとかしたあと、Ctrl+Alt+\を押してる。
フィリング?は知らんけど。
0731デフォルトの名無しさん
2010/01/17(日) 13:20:540732デフォルトの名無しさん
2010/01/17(日) 13:21:05def hoge
とても長いメソッド...
local_var = value #<= ここだけを書き換えたい
...
end
end
メソッド定義内のローカル変数たった一行を書き換えたいんです。
とても長いメソッドなので,class_eval{def...無意味なコピペ...end}をしたくありません。
スパッと書き換えることはできませんか?
とりあえずSCRIPT_LINES__とripperを使えば20行くらいでできるのですが,
もっとストレートな方法があるかもしれないと思い質問しました。
ちなみにbindingを使った実験には失敗しました。
よろしくお願いします。
0733デフォルトの名無しさん
2010/01/17(日) 14:05:33本スレ行って聞いてみたら
0734デフォルトの名無しさん
2010/01/17(日) 14:22:300735デフォルトの名無しさん
2010/01/17(日) 14:32:07昔はフロッピーで小分けにして、配布してたな。
0736デフォルトの名無しさん
2010/01/17(日) 14:36:14Perlの↓相当がgemにあればいいんだろうけど
http://perl-users.jp/articles/advent-calendar/2009/hacker/20.html
いまgemでサーチかけた感じだとなさそう
必要なら↑を参考にしてRubyにportしたら?
0737デフォルトの名無しさん
2010/01/17(日) 14:46:291.9.2で扱えるようになるかも、ってことらしい
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45826
0738デフォルトの名無しさん
2010/01/17(日) 14:54:30あれ、WindowsだとUNICODEファイル名ダメだったのかー
gemでモンキパッチみたいに簡単にWindowsのときだけOKにできるのとかあったら便利そうだね。
システムの根底だから難しいのかね
0739デフォルトの名無しさん
2010/01/17(日) 20:48:07ありがとう。だが初心者にはハードル高すぎ
1.9.2に期待しまつ。いつごろ出るんだろ?今年の春頃?
0740デフォルトの名無しさん
2010/01/17(日) 20:52:56rubygemsとかも未対応で動作しない可能性も大きい
しばらく前の1.9.1状態
来年くらいには使える状態になってるんじゃないかなあ
0741デフォルトの名無しさん
2010/01/17(日) 21:21:560742デフォルトの名無しさん
2010/01/17(日) 21:54:31ttp://gist.github.com/211635
0743デフォルトの名無しさん
2010/01/17(日) 22:12:49フィリングってのはこういうの。文章の段落内でESC qでできる。
# ながーーーーーい説明文菜がーーー否がーーー否がーーーーーーーーーーーーーーーーーーーーい
↓
# ながーーーーーい説明文菜がーーー
# 否がーーー否がーーーーーーーーー
# ーーーーーーーーーーーい
んで、ソースコード全体を一発で整形&フィリングしたいのんよ。ruby-modeで。
0744デフォルトの名無しさん
2010/01/17(日) 22:20:06見てわからんのならスクリプトがすこし違って詰まったときの対処も自力で全然できないということだから
素直に Ruby の勉強を進めたほうがいいような気がしないでもない
前情報として、Ruby の知識が全然ないのなら使えないよ
MySync GoogleContacts でぐぐると唯一出てくるから、
これをしたい場合は Ruby 上でこれを動かすしかないわけだけど、
まったくの一見さんが使えるようなクオリティにはそもそもなってない
を踏まえて
Ruby を適当にインストール、URL の Download からダウンロードして展開して、
au2gcontact.rb をてきとうなとこにコピー
その後、au2gcontact.rb 自身のファイルの文字コードを Shift_JIS というか CP932 に変換
MySync が吐き出したエクスポートの CSV(Shift_JISに変換済)を第 1引数に、
GoogleContacts に食わせたいファイル名を第 2引数にして、
ruby au2gcontact.rb mysync.csv output.csv
と実行
output.csv は ShiftJIS(というかCP932)だが、
これがそのまま GoogleContacts にでインポートできるかどうかまでは知らない
0745742
2010/01/17(日) 22:53:26rubyをインストール。
ソース(っていうのかな?)をメモ帳にコピペ。拡張子を.rbに変える。
au2gcontact.rbとaddress.csv(←LismoPortが吐き出すやつ)とgcontact.csvをC:\Documents and Settingsに置く。
コマンドプロンプトからruby au2gcontact.rb address.csv gcontact.csv
出てきたのをgmailにインポートでおk。
いやーすごいですね。感動しました。ほんとありがとうございました。
0746デフォルトの名無しさん
2010/01/18(月) 01:19:39Emacs のスレで聞いたら adaptive-fill-mode の使い方なり filladapt.el の後継なり
何か情報が入るんでない?
0747デフォルトの名無しさん
2010/01/18(月) 03:41:47vim+neocomplcacheでやっとります。
0748デフォルトの名無しさん
2010/01/18(月) 09:32:46Ruby 1.8.7-p174 の select が遅かった話じゃなくて?
http://www.garbagecollect.jp/~usa/d/200909c.html
Ruby 1.8.7-p249 にすれば直るよ。
> たしか \d が漢数字にマッチしてしまって使いにくくなってたので
Ruby 1.9.1 の初期はそうだったんだけど、この挙動はバグ扱いされて修正されたので、
Ruby 1.9.1-p378 にすれば直るよ。
0749742
2010/01/18(月) 09:33:490750デフォルトの名無しさん
2010/01/18(月) 15:18:11とすると、"¥123¥456" みたいな表示なりますけど、これを "日本語" のままで表示させることはできませんか。
0751デフォルトの名無しさん
2010/01/18(月) 15:35:00irb(main):001:0> puts "日本語".inspect
"\223\372\226{\214\352"
=> nil
irb(main):002:0> $KCODE = "s"
=> "s"
irb(main):003:0> puts "日本語".inspect
"日本語"
=> nil
0752デフォルトの名無しさん
2010/01/18(月) 15:37:06>ruby -Ks -e'puts "日本語".inspect'
"日本語"
0753739
2010/01/18(月) 18:25:320754デフォルトの名無しさん
2010/01/18(月) 18:35:120755デフォルトの名無しさん
2010/01/18(月) 19:39:35見なかったことにするわけにもいかんと思うんだが、代替手段は何なのだろう
そこだけRubyを使わない?
0756デフォルトの名無しさん
2010/01/18(月) 19:58:330757デフォルトの名無しさん
2010/01/18(月) 20:21:42require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8
fso = WIN32OLE.new('Scripting.FileSystemObject')
a = fso.CreateTextFile("♡♥♡♥.txt", true)
a.WriteLine("This is a test")
a.Close()
0758デフォルトの名無しさん
2010/01/18(月) 20:35:460759デフォルトの名無しさん
2010/01/18(月) 20:39:550760デフォルトの名無しさん
2010/01/18(月) 21:01:23慣れればどうということもないんだが
0761デフォルトの名無しさん
2010/01/18(月) 21:11:27これどうすればIOやDirで扱えるんですか?
0762デフォルトの名無しさん
2010/01/18(月) 21:20:06扱えない
全部 WIN32OLE 内で完結させる必要がある
必要なのは Ruby の知識じゃないね
0763デフォルトの名無しさん
2010/01/18(月) 21:33:400764デフォルトの名無しさん
2010/01/18(月) 21:35:430765デフォルトの名無しさん
2010/01/18(月) 22:55:11data = {/key/ => lambda{|m| "<#{m}>"}}
…
data.each_pair do |re, p|
file.gsub!(re){|m| p.call(m)}
end
p file #=> key が <key> になってる
というような、
{正規表現 => キーのマッチ結果を便利に利用した結果の返り値またはただの文字列}
というデータを用いた連続置換をしたいのです
それで、data は外部から自由に与えたいのです
でも、よく考えたら lambda を作った時点では gsub の $1 も \1 もまだ無いから利用できないわけで
なにかうまい方法ないですか
eval ならなんとかなると思ったんだけど普通の置換後に使いたいだけの文字列も eval してしまいます
0766デフォルトの名無しさん
2010/01/18(月) 23:47:16m = Regexp.last_match
puts m[0]
とかでできないかな?
あと
data.each_pair do |re, p|
file.gsub!(re, &p)
end
でいいような気がするけど試してはいない。
0767デフォルトの名無しさん
2010/01/18(月) 23:55:48to = data.each_pair.inject(from) {|result, pair| result.gsub(pair[0], &pair[1]) }
0768デフォルトの名無しさん
2010/01/18(月) 23:59:30a = 'abc def'
data = [['(\w+)', '<\1>'], ['(> <)', '> < \1 > <']]
data.each{|reg, rep| a.gsub!(/#{reg}/, rep)}
a => "<abc> < > < > <def>"
0769デフォルトの名無しさん
2010/01/19(火) 00:09:09なにそのわかりやすくしようとする気概をぜんぜん感じない例
0770デフォルトの名無しさん
2010/01/19(火) 00:10:57766-768が書いているようにgsub!の第2引数で置換パターンを書いたほうが
単なるstringでパターンを渡せるので簡単だと思う
766,767が書いてるパターンの前の '&' って
どういう意味?
0771デフォルトの名無しさん
2010/01/19(火) 00:21:13ttp://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html
0772デフォルトの名無しさん
2010/01/19(火) 00:26:03俺には768の方がわかりやすいな、例は見づらいが
0773デフォルトの名無しさん
2010/01/19(火) 00:42:38>>766-768
irb> data = {/k1/ => 'v1', /k(2)/ => 'v\1', /k3/ => lambda{|m| m.sub(/k/,'v')}}
irb> str = 'k1, k2, k3'
irb> data.each_pair do |re, p| p.kind_of?(Proc) ? str.gsub!(re, &p) : str.gsub!(re, p) end
irb> p str
"v1, v2, v3"
思ったことに近いことができましたーうおー
助かりましたせんきゅうです
0774デフォルトの名無しさん
2010/01/19(火) 03:46:28s="123123456456"
s.gsub!(/〜/){|c|
uni_enc(c)
}
p s
=>
123%uFF11%uFF12%uFF13456%uFF14%uFF15%uFF16
みたいに1byteじゃない文字だけ変換して置換したいです
よろしくお願いします
0775デフォルトの名無しさん
2010/01/19(火) 06:56:24s="123123456456"
s.gsub!(/./){ |ch|
(ch.length==2) ? "(#{ch})" : ch
}
puts s;
0776デフォルトの名無しさん
2010/01/19(火) 07:36:200777デフォルトの名無しさん
2010/01/19(火) 14:27:57# Ruby1.9以降か正規表現エンジンに鬼車を使用
s="123123456456"
s.gsub!(/[^\p{ASCII}]/){|c|
"%u"+c.encode('utf-8').ord.to_s(16)
}
p s
0778デフォルトの名無しさん
2010/01/19(火) 17:08:32test.each{|key, val|
}
これを実行したら最後二つの"うし"=>2と"うま"=>4しか処理が実行されないんですが
キーの要素が一緒だと前にある奴は消されてしまうんですか?
またこれをハッシュの数分だけ実行させることはできないんでしょうか?
0779デフォルトの名無しさん
2010/01/19(火) 17:22:15ハッシュの意味を勉強してこい
0780デフォルトの名無しさん
2010/01/19(火) 17:30:11test = [ ["うし", 5], ["うま", 3], ["うし", 1], ["うし", 2], ["うま", 4] ]
test.each {|k, v| use(k, v) }
値が配列になったハッシュを使う方法
test = {"うし"=>[5, 1, 2], "うま"=>[3, 4] }
test.each {|k, a| a.each {|v| use(k, v) } }
0781デフォルトの名無しさん
2010/01/19(火) 17:44:49a0-0 a0-1 a0-2 a0-3
a1-0 a1-1 a1-2 a1-3
a2-0 a2-1 a2-2 a2-3
から任意が選ばれた配列a
a=["a0-0","a2-2","a2-3"]
より、
配列bを作成したいのですが、
なにか良い方法はないのでしょうか?
b=[[1,0,0,0],[0,0,0,0],[0,0,1,1]]
0782デフォルトの名無しさん
2010/01/19(火) 17:51:330783デフォルトの名無しさん
2010/01/19(火) 17:54:09"a2-2" → [0, 0, 0, 0]
"a2-3" → [0, 0, 1, 1]
という対応があるように見えるのだが、2つめは [0, 0, 1, 0] ではない?
どういうルール?
0784デフォルトの名無しさん
2010/01/19(火) 17:55:50失敗してるぞw
0785デフォルトの名無しさん
2010/01/19(火) 17:58:38a=["a0-0","a2-2","a2-3"]
b = Array.new(3){ Array.new(4, 0) }
a.each do |x|
if /a(\d)-(\d)/ =~ x
b.push[$~[1].to_i][$~[2].to_i] = 1
end
end
p b #=> [[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 1]]
0786デフォルトの名無しさん
2010/01/19(火) 18:00:09成功したぞw
0787785
2010/01/19(火) 18:00:44> b.push[$~[1].to_i][$~[2].to_i] = 1
b[$~[1].to_i][$~[2].to_i] = 1
0788デフォルトの名無しさん
2010/01/19(火) 18:02:57a0-0 は配列aにあるから 1
a0-1 はないから0
a0-2 はないから0
a0-3 はないから0
これにより[1,0,0,0]です。
a2-0 はないから0
a2-1 はないから0
a2-2 はあるから 1
a2-3 はあるから 1
これにより[0,0,1,1]です。
このようなルールです。
0789デフォルトの名無しさん
2010/01/19(火) 18:26:34ありがとうございます。
この方法で問題なく解決しました。
0790デフォルトの名無しさん
2010/01/19(火) 22:18:49どうすればいいのでしょうか?
require 'cgi'
c = CGI..new
hoge = c["va"]
print "Content-type: text/html; charset=EUC-JP\n\n"
print "<html><head><title></title></head><body>\n"
print "<p>"
if hoge == 1
print "<p>問題1</p>\n"
print"<form method=\"POST\" action=\"./test.rb\">\n"
print"<input type=\"radio\" name=\"va\" value=\"2\">ア
print"<input type=\"radio\" name=\"va\" value=\"2\">イ
print"<input type=\"radio\" name=\"va\" value=\"2\">ウ
print"<input name=\"ok\" type=\"submit\" value=\"OK\">\n"
print"</form>\n"
elsif hoge == 2
略
end
print "</p></body></html>\n"
0791デフォルトの名無しさん
2010/01/19(火) 22:32:03Rubyは基本、HTTPのクエリ文字列とかを隠蔽しない
そのときどんなデータがどのように送られてくるものなのか、HTTPの勉強をするといいぞ
0792デフォルトの名無しさん
2010/01/19(火) 23:06:30ありがとうございます
勉強して何とかやってみます
0793デフォルトの名無しさん
2010/01/20(水) 08:35:06事実だから仕方ないが、あんま威張ることじゃないけどねえ
Railsで作ってRailsで表示してRailsで受け取れば抽象度高くできそうだが、もうCGIではないな
0794デフォルトの名無しさん
2010/01/20(水) 08:36:210795デフォルトの名無しさん
2010/01/20(水) 08:49:200796デフォルトの名無しさん
2010/01/20(水) 12:53:24文字列を受け取ってスペースと記号を削除した文字列を返すメソッドを作りたいんですが
どうすればいいでしょうか?
ちなみに条件はgsubメソッドをつかうこと
記号は全角も半角も含む(","とか"。"とか"?"とか"?"とか)
どなたかお願いします
0797デフォルトの名無しさん
2010/01/20(水) 12:56:49Rubyの宿題教えてください。2限目
http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0798デフォルトの名無しさん
2010/01/20(水) 13:10:06スレ違いでしたね
すいません
わざわざありがとうございます
0799デフォルトの名無しさん
2010/01/20(水) 13:48:31自作メソッドとかの動作確認的な風に使うな
0800デフォルトの名無しさん
2010/01/20(水) 14:45:43お勧めの本はありますか?あるいは、これは読んで
おくべき本でも構いません。
Webでいろいろ読んだのですが、modelのassociation
やAjaxが難しく感じました。
0801デフォルトの名無しさん
2010/01/20(水) 14:50:41【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
0802デフォルトの名無しさん
2010/01/20(水) 14:53:240803デフォルトの名無しさん
2010/01/20(水) 16:16:05ありがとう。
0804デフォルトの名無しさん
2010/01/20(水) 16:21:54初心者が最低限これだけあればまずはなんとかなる!って書籍を3つ。
というか俺が実際にRails初心者レベルで仕事で使った本
・RailsによるアジャイルWebアプリケーション開発
http://www.amazon.co.jp/dp/4274067858/
・Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応
http://www.amazon.co.jp/dp/4839928266/
・Railsレシピブック 183の技
http://www.amazon.co.jp/dp/4797336625/
あとは、webサイトだけど公式のガイド。ちょっとしたわからんことはまずこれ見たら大体すむ
Ruby on Rails guides
http://guides.rubyonrails.org/
毎回聞かれてるんで、Railsスレテンプレに入れといていいと思うんだ・・・
0805デフォルトの名無しさん
2010/01/20(水) 16:23:43Ruby 1.8.7にて、ブロックつきメソッドの呼び出したブロックの返り値を得たいのですが、
ブロック内で
return "UNKO!!"
すると、
unexpected return (LocalJumpError)
と言われます。
break "UNKO!!"
では問題ないようなのですが、これはこういうものなのでしょうか?
0806デフォルトの名無しさん
2010/01/20(水) 17:03:26紹介ありがとう
とりあえずそれらと公式サイトで始めてみます
0807デフォルトの名無しさん
2010/01/20(水) 17:04:09トップレベルでreturn使っていない?
def f(a)
a.each{ return 1 }
end
a = [1,2,3]
f(a) # これはだいじょうび
a.each{ return 1 } # でもこれはダメ
0808805
2010/01/20(水) 17:50:49ありがとうございます。
エラーでない方法をお聞きしたいというよりも、もう少し具体的に聞くべきでした。
こちらの期待する動作としては、
”UNKOoooooooOOOO!!”と”f is finisheeeeeeeedddddd!!111”ともに表示させたいのです。
breakの代わりにreturnだと”f is finisheeeeeeeedddddd!!111”が表示されませんよね・・・?(fから抜けてる?)
実際のコードではa.eachではなくeachの代わりに自分で定義したブロックを必要とするメソッドを呼び出してます
def f(a)
puts a.each{ break "UNKOoooooooOOOO!!" }
puts "f is finisheeeeeeeedddddd!!111"
end
a = [1,2,3]
f(a) # これはだいじょうび
#a.each{ return 1 } # でもこれはダメ
0809デフォルトの名無しさん
2010/01/20(水) 18:01:04だからそのfの中でretrunを使ったら内部ブロックでだろうとfを脱出する
同様にこれも無理
def f
break
end
f
0810デフォルトの名無しさん
2010/01/20(水) 18:09:10訳がわからず困っています。
取り合えず、"RailsによるアジャイルWebアプリケーション開発”の�T部
HelloWorldプログラムを作成して動かすまでを試してみて、
ああ、PHPでSmarty使ってMVCモデルで作成するのを自動、徹底
してる感じだなと思い、そのまま本チャンプログラムに挑みましたが・・・
・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。
・ブラウザに表示してソースコードを見てみると、1万行近い
ソースコードで表示と一致していない。
・ブラウザのURL表示がページ遷移しても常に一緒。
と、始めて見る構成でした。
私のRubyの理解が足りないと思い、�U部以降を読み進めようと思いましたが
このプログラム構成が特殊だから、参考書読み進めても効果は薄く
それよりプログラムの解析を続けるべきでないかと思い直しました。
皆さんに質問ですが、こういった構成は一般的なのですか?
それなりにある手法ならば、読むべき参考書、検索のキーとなる
単語を教えていただけたらと思います。
要領得ない質問ですみませんがお願いします。。。
0811デフォルトの名無しさん
2010/01/20(水) 18:17:27お前には絶対に無理だ
0812sage
2010/01/20(水) 18:20:390813デフォルトの名無しさん
2010/01/20(水) 18:31:080814デフォルトの名無しさん
2010/01/20(水) 18:34:15直前読めずにスレのルールすら理解できないようでは駄目だろうな
0815810
2010/01/20(水) 18:51:22>関連スレやURLは>>2-5あたりを見てください。
>Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
これですか?
もっと詳細に質問すべきだったのかもしれませんが、
個々のプログラムの質問以前に全体として???だったもんで。。。
>>810,813
つまり、初心者レベルでないから私には到底無理ってことですか?
それならそれで上にそう報告しますので助かります。
それでもやれって言われそうですが・・・。
逆に、参考書読んだらわかるようなことを質問するなというのであれば
すみません。
参考書、全部読んでみます。
取り合えず、初心者参考書レベルの問題なのかだけでも教えて下さい。
0816デフォルトの名無しさん
2010/01/20(水) 19:11:01君が書いてる質問の中に、Rubyそのものに関する話題は一切ない。
Railsスレへ行きなされ。
>>813が書いてるのは、たぶん、Railsスレへ行けということが示されてるのに
わざわざ餌を撒いてここに君を留まらせた罪が重いってこと。
0818デフォルトの名無しさん
2010/01/20(水) 19:21:36読んでないことを期待するが、40パーセントくらいしか悪くないのでそれほど謝る必要はない
残り40パーセントは>>804で、残り20パーセントはたまたま重なったタイミング
0819デフォルトの名無しさん
2010/01/20(水) 19:39:51eachごとの結果がほしいのなら
ブロックの外で定義した配列に
欲しい結果を入れておく。
またはブロックのto_aとか
701へのレス703, 709参照。
0820804
2010/01/21(木) 10:54:34"RailsによるアジャイルWebアプリケーション開発”のサンプルコードの話じゃなくて、
>>810が取り組んでる仕事のコードだと思うぞ
0822805
2010/01/21(木) 10:56:56>>809
> breakはブロックの脱出、returnはメソッドの脱出ってこと
ああ!それです。まさにその1行が聞きたかったのです。
俺はもっとよい聞き方を憶えないといけないな・・・
0823デフォルトの名無しさん
2010/01/21(木) 11:43:100824デフォルトの名無しさん
2010/01/21(木) 12:57:392. ruby -e 'puts $<.read' file.txt
1.の文では正しくfile.txtの内容が表示されるのですが、
2.の文で「指定されたファイルが見つかりません。」と怒られます。
リファレンスマニュアルの$<の項には
「つまり定数 ARGF の別名。 」
と書いてあるので、
1.と2.で同じ結果を期待したんですけど。
どこが間違ってるんでしょうか?
Ruby1.9.1でOSはWindowsXPです。
よろしくお願いします。
0825デフォルトの名無しさん
2010/01/21(木) 13:06:28Windowsの<とか>とかってエスケープするか
""で括らなきゃいけなかったんでした。
1. ruby -e "puts ARGF.read" file.txt
2. ruby -e "puts $<.read" file.txt
または
2. ruby -e 'puts $^<.read' file.txt
なら同じ結果になりますね。
スレ汚しスマソ。
0826デフォルトの名無しさん
2010/01/21(木) 13:10:22「指定されたファイルが見つかりません。」を出してるのは実はcmd.exeだ
「<」を誤認識してる
ということで cmd.exe から < をエスケープすればよい
cmd.exe のエスケープ文字は ^ だから、
ruby -e 'puts $^<.read' file.txt
0827816
2010/01/21(木) 14:12:27適切な場所でやった方がいいよ、ってことで。
0828デフォルトの名無しさん
2010/01/21(木) 14:15:52すみませんすみません
ありがとうございました。
0829デフォルトの名無しさん
2010/01/21(木) 14:33:03>・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。
>・ブラウザに表示してソースコードを見てみると、1万行近い
> ソースコードで表示と一致していない。
>・ブラウザのURL表示がページ遷移しても常に一緒。
> と、始めて見る構成でした。
これはAjaxでページを作ってるんだろう。Railsうんぬんはさほど関係ない。
> 私のRubyの理解が足りないと思い、
いや、JavaScriptやAjaxの知識が足りないだけだと思う。
0830デフォルトの名無しさん
2010/01/21(木) 14:34:480831デフォルトの名無しさん
2010/01/22(金) 17:50:520832デフォルトの名無しさん
2010/01/22(金) 17:58:09現時点で ri を利用してないのなら、 --no-ri で飛ばしてOK
基本的にロクなこと書いてないしソースを grep したほうがおおむね速いので、rdoc もなくてもいい
rdoc がきっちりしているライブラリのみ、マニュアル読む機会があるときだけ rdoc コマンドで構成するか、
あるいはネットで公開されてる rdoc を読めばいい
0833デフォルトの名無しさん
2010/01/22(金) 19:04:470834デフォルトの名無しさん
2010/01/22(金) 19:13:46インストール速いしディスクアクセスも少なくて済むしいいことだらけ
0835デフォルトの名無しさん
2010/01/22(金) 19:37:040836デフォルトの名無しさん
2010/01/22(金) 19:41:39自分がインストールするライブラリではrdocは使わない
0837デフォルトの名無しさん
2010/01/22(金) 19:46:040838デフォルトの名無しさん
2010/01/22(金) 19:54:48あちらさんの使ってるフォント自体に日本語文字がないから、本気で表示が崩れるぞ
外国語の文字も適当に表示できるフォントの認知度が高いのは日本くらいだ
0839デフォルトの名無しさん
2010/01/22(金) 19:59:50英語でコメント書くの大変だって言うような人が作るライブラリなんて、どうせ最初に使うのは日本人が主だろうしさ
0840デフォルトの名無しさん
2010/01/22(金) 20:14:17英語ドキュメント書けないからと言って諦めるのはもしかしたら勿体無さ過ぎるかもしれない
0841デフォルトの名無しさん
2010/01/22(金) 22:08:16def consecutivenum(path)
i = 1
files = Dir.glob("#{path}/*").reject{|name| FileTest.directory?(name)}
files.sort{|a, b|
File.mtime(a) <=> File.mtime(b)
}.each{|name|
File.split(name)[1] =~ /.+(\..+)/
File.rename("#{name}", "#{File.split(name)[0]}/#{i}#{$1}")
i += 1
}
end
実行するとファイルが消去されたりコピーされたりしてしまいます。
試しにDir.glob(#{path}/*)だけを実行したところ、存在しないファイル名が混じっていました。
また、そのファイルをFileTest.exist?に送るとtrueが返ってきます。Windowsの隠しファイルでもありませんでした。
何がどうなっているのかさっぱりわかりません。OSはVistaでRubyのバージョンは1.8.7です。
ご助力よろしくお願いします。長々と失礼しました。
0842デフォルトの名無しさん
2010/01/22(金) 22:40:56存在します
または、UNICODEファイル名です
UNICODEファイル名だった場合、Rubyから扱うことはできません
0843デフォルトの名無しさん
2010/01/22(金) 23:30:170844デフォルトの名無しさん
2010/01/22(金) 23:33:110845デフォルトの名無しさん
2010/01/23(土) 00:28:53>>843
ファイル名ですが、エクスプローラーやコマンドプロンプトのdirで確認できずにrubyで検出されたのは
6.jpg
2.ini
の二つです。
0847デフォルトの名無しさん
2010/01/23(土) 00:59:11そのディレクトリで
system('start 6.jpg')
ってやればjpegに関連付けられたアプリで 6.jpg が開くから確かめてみたら?
0848デフォルトの名無しさん
2010/01/23(土) 01:01:01dir /x
とか
0849デフォルトの名無しさん
2010/01/23(土) 01:08:436.jpgについてはエラーが出ましたが、2.iniは開かれました。
>>848
6.jpg、2.iniいずれも出ませんでした
0850デフォルトの名無しさん
2010/01/23(土) 01:16:26でもdirでは出てこないのか・・・謎だ・・・
require 'win32ole'
fso = WIN32OLE.new('Scripting.FileSystemObject')
fso.GetAbsolutePathName('2.ini')
とかしてみたら?
0851デフォルトの名無しさん
2010/01/23(土) 01:27:40さきほどまでのフォルダではなくtempフォルダのパスが出ました。
今度はそのtempフォルダで start 2.ini を実行しましたが開かれず、dirでも見つかりませんでした
0852デフォルトの名無しさん
2010/01/23(土) 01:35:45$KCODE = 'SJIS'
を付けて実行してみるべき
FileSystemObjectで見えているパスはWindowsで見えているパスなので
fso経由で2.iniが見えているのにdirで見えないのは、ちょっと不思議
0853デフォルトの名無しさん
2010/01/23(土) 01:48:34(ただ、コンソールの作動場所のせいかスクリプトの保存場所のせいかまた別のパスが返ってきましたが)
>>850のスクリプトはなにを意味するのですか?2.iniの代わりに適当な文字列を入れてもパスが返ってくるのですが・・・
0854デフォルトの名無しさん
2010/01/23(土) 02:49:29attrib *.*
はどう?
0855デフォルトの名無しさん
2010/01/23(土) 02:52:21フォルダオプション→表示→保護されたオペレーティング〜
のチェック外してみ
0856デフォルトの名無しさん
2010/01/23(土) 14:46:40存在はしてるけど何らかの属性がついてて、そのせいでエクスプローラーに表示されないだけだな
0857デフォルトの名無しさん
2010/01/23(土) 15:10:59そのときだけ状態メッセージを print するためにはどのようにするのは ruby 的にエレガントでしょうか?
0858デフォルトの名無しさん
2010/01/23(土) 15:12:050859デフォルトの名無しさん
2010/01/23(土) 15:43:41読み手にとっていちばん妥当なもの
require 'logger'
@log = Logger.new(@logfile||$stdout)
@log.debug "debug log message" if @log
書く人が楽だがメソッド名に独り善がり感またはどや顔が滲み出たもの
def D(msg)
return unless @debug_output
@debug_output << msg
@debug_output << "\n"
end
@debug_output = $stderr
D "debug log message"
後者のタイプで def LOG(msg) を時々見る
0860デフォルトの名無しさん
2010/01/23(土) 17:54:08ありがとうございます!
後者のDをDoyagaoとして使いたいと思います(違)^A^K二つの視点から例を出していただきとても参考になりました!
0861デフォルトの名無しさん
2010/01/23(土) 18:59:49>>854-856
2.iniがシステムファイルとして存在していました。相変わらず6.jpgは見つかりません。
0862デフォルトの名無しさん
2010/01/23(土) 19:46:16tempか?
最初のフォルダの中のファイルは全部連番に変わったのか?
tempのファイルも全部か?
0863デフォルトの名無しさん
2010/01/23(土) 21:43:18調べたいのですが、実際にreadすることなしにこれを実現する方法はありますか?
パッと思いついたのは、openしてからファイルの末尾にseekして
先頭からのpositionを得るという方法ですが、他にはありますか。
0864863
2010/01/23(土) 21:46:20File.open("/dev/sda") do |io|
io.seek 0, IO::SEEK_END
io.pos # /dev/sda のバイト列の長さ
end
0865デフォルトの名無しさん
2010/01/23(土) 21:49:18x = 10
def func
x = 20
end
func
puts x #=>10
これがxが20にならないので、最初に定義したxはグローバルには見えないどこかに閉じ込められてるのかな。
0866デフォルトの名無しさん
2010/01/23(土) 21:50:04完全にUNIX/Linuxプログラミングの話題じゃまいか
0867デフォルトの名無しさん
2010/01/23(土) 21:51:41を、Rubyで実現するにはどうすればいいですかという話だろう
0868デフォルトの名無しさん
2010/01/23(土) 21:53:55変数のスコープという概念を勉強してくれ
ごく端的に説明すると消えるというか、スコープを抜けるとアクセス不可になって取り出す手段がなくなる
def の「中」のローカル変数は def の「外」からはアクセスできない
だからメソッドの引数で「中」に入れてメソッドの返り値で「外」に出す
0869デフォルトの名無しさん
2010/01/23(土) 21:57:270870デフォルトの名無しさん
2010/01/23(土) 22:02:550871863
2010/01/23(土) 22:03:17やってみたのですが size = 0 になっています。
statコマンドで調べても0バイトになっています。
そもそも、ブロックスペシャルファイルのバイト列の長さって、デバイス依存な気がします。
つまり「ファイルサイズ=バイト列の長さ」は成り立たない、ということかも知れません。
0872デフォルトの名無しさん
2010/01/23(土) 22:03:31#<File::Stat dev=0xe, ino=5003, mode=060660, nlink=1, uid=0, gid=6, rdev=0x800,
size=0, blksize=4096, blocks=0, atime=Sat Jan 23 18:12:33 +0900 2010,
mtime=Sat Jan 23 18:12:33 +0900 2010, ctime=Sat Jan 23 18:12:55 +0900 2010>
0873863
2010/01/23(土) 22:06:31ふむ、、やっぱり size = 0 ですね。。
バイト列の長さがデバイス依存(つまり不定値)なのは、よく考えてみればわかります。
/dev/null は常に長さ0ですし、/dev/zero は無限大。
難しいです。。
0874デフォルトの名無しさん
2010/01/23(土) 22:11:190875デフォルトの名無しさん
2010/01/23(土) 22:12:16カーネルとファイルシステムの知識が必要だし
Ruby初心者スレで聞くような話題じゃないよ
0876865
2010/01/23(土) 22:18:31ありがとうございます。
ただ、自分が不思議に思ったのは、外から関数内の変数にアクセスできないことではなく、
関数の外の変数に内側からアクセスできてないことです。
一般的に内側から外側の変数にはアクセスできると思うので。
x=20の段階で、外側の変数に代入するのではなく、新しい変数を作ってしまっているのが不思議なんです。
0877デフォルトの名無しさん
2010/01/23(土) 22:18:59変数のスコープという概念を勉強してくれ
0878863
2010/01/23(土) 22:19:06LVM の論理ボリュームのスナップショットを自動で作成しようかと。
ただし、論理ボリュームの大きさが:
・Xバイト以下だったら、それと同じ大きさのスナップショットを作成
・Xバイトより大きければ、Xバイトのスナップショットを作成
という処理をしたかったのですが、論理ボリュームの大きさを調べるために
外部のコマンドに投げるのは嫌だったので、どうせならデバイスファイルの中身の大きさを調べちゃえ、みたいな感じです。
>>875
すみません、そうします。
カーネルの知識はありませんが。。
0879デフォルトの名無しさん
2010/01/23(土) 22:22:190880デフォルトの名無しさん
2010/01/23(土) 22:27:03わあそれはRuby標準では無理だ
そのように動作するようなロジックを知っている上で、Rubyでそのまま記述する必要がある
0881デフォルトの名無しさん
2010/01/23(土) 22:31:03Cで書かれているから読んでみれば分かるかな?
ioctlに投げているのかも知れないが、詳しくはわからん。
0882デフォルトの名無しさん
2010/01/23(土) 22:31:580883デフォルトの名無しさん
2010/01/23(土) 22:39:51関数は単なるブロックとは違うよ
x=1
if true
x=2
end
puts x
これなら2が出力されるけど。ごっちゃになってるんじゃないかな
0884デフォルトの名無しさん
2010/01/23(土) 22:40:360885デフォルトの名無しさん
2010/01/23(土) 23:22:06制御構造はブロックを作らないので例がいまいち
if true then x = 'foo' else y = 'bar' end
puts x #=> 'foo'
puts y #=> nil
ブロックは do end や {} で作られる
↓を読んでみよう
http://www.ruby-lang.org/ja/man/html/trap_A5B9A5B3A1BCA5D7A1A2C0A9B8E6B9BDC2A4.html
ただし、上のページの一番最後のブロック内で現れたローカル変数の取り扱いは
1.8系と1.9系で異なる
1.9系であれば最後の "p a.class" は Array になる
http://d.hatena.ne.jp/conceal-rs/20090119#1232348671
0886デフォルトの名無しさん
2010/01/24(日) 02:19:34puts x #=> 'foo'
ruby1年も使ってるのにこれ知らなかったw
if文ってスコープ作らないのか
0887デフォルトの名無しさん
2010/01/24(日) 02:24:52if文ではありません
0888デフォルトの名無しさん
2010/01/24(日) 04:02:11変数宣言がない言語は一般的に、if文やwhile文では変数スコープを作らないんじゃないかな。
PHPやpythonも作らないし。
Perlはmyが、JavaScriptはvarがあるから作るけど。
>>887
こういう、わざわざ初心者を混乱させるような書き方するやつって何なんだろうね。
0889デフォルトの名無しさん
2010/01/24(日) 04:10:31ブロックスコープはlet(Javascript1.7)
0890デフォルトの名無しさん
2010/01/24(日) 05:12:52x = 10; // var 宣言していないのでグローバル変数
function tmp() {
alert(x);
var x = 20;
}
alertで表示されるのは 'null'
なぜなら『関数』スコープだから
関数内でローカル変数が宣言されているので
グローバル変数がシャドウイングされる
でもまだ未定義なので 'null'
0891デフォルトの名無しさん
2010/01/24(日) 06:15:330892デフォルトの名無しさん
2010/01/24(日) 06:48:37なにがアフォなのかわからない俺には
釣ることもできんがwww
0893デフォルトの名無しさん
2010/01/24(日) 07:29:56> こういう、わざわざ初心者を混乱させるような書き方するやつって何なんだろうね。
制御構造はスコープを作らない
ifは制御構造だからスコープを作らない
ブロックは制御構造ではないからスコープを作る
0894デフォルトの名無しさん
2010/01/24(日) 11:48:10最初からそれを書けば文句言われなかったのにね
0895デフォルトの名無しさん
2010/01/24(日) 11:48:30混乱というが、値を返す式であるということは知っとくといいこともあるかもよ
0896デフォルトの名無しさん
2010/01/24(日) 11:59:34なるほど
x = if true then a = 'foo' end
p x #=> "foo"
で、この後
x = if x == a then puts x end
だと
p x #=> nil
で1.9.1の
x = if x == a then p x end
だと
p x #=> "foo"
うむ、わかりやすいなw
0897デフォルトの名無しさん
2010/01/24(日) 12:53:120898デフォルトの名無しさん
2010/01/24(日) 13:06:48ifが文ではないとしたら何なのだろうと考えないのかね
0899デフォルトの名無しさん
2010/01/24(日) 13:22:19だから書かないと
0900デフォルトの名無しさん
2010/01/24(日) 13:22:590901デフォルトの名無しさん
2010/01/24(日) 13:26:22if if if true then a = true end then a = false end then else a = 'foo' end
p a #=> 'foo'
0902デフォルトの名無しさん
2010/01/24(日) 13:29:55難しい質問だなw
返値があって代入の = の右に書けるのが式、ぐらいの理解でいいと思う
0903デフォルトの名無しさん
2010/01/24(日) 13:37:22式は他の式の一部になれる、文の一部にもなれる。
文は文の一部にはなれない。
ただし、文は括弧で囲むと式になり、式は(ry
0904デフォルトの名無しさん
2010/01/24(日) 13:41:39値があるのが式、値がないのが文
セミコロンを付けて文(式文)になるのが式
文は {} で囲んで複文という文になる
0905デフォルトの名無しさん
2010/01/24(日) 13:45:38暗黙なんかじゃない
制御構造だとマニュアルにも書いてあるし、解説も多くがそのように言うはずだ
if文なんて書いてあったら焼き捨てろ
と書くとオフィシャルマニュアルの古い部分の記述が焼かれていい感じだが
ポリシー無しにかかれてた時代のはどんどん置き換えるべき
0906デフォルトの名無しさん
2010/01/24(日) 13:53:290907デフォルトの名無しさん
2010/01/24(日) 13:55:52>また、メソッドの引数に指定できない式と指定できる式があります(このような式を「文」と呼び分ける場合があります)。
ってあるしif文って呼んでも別に問題ないんじゃないかなーって思うけど
http://www.ruby-lang.org/ja/man/html/_A5D7A5EDA5B0A5E9A5E0.html
0908デフォルトの名無しさん
2010/01/24(日) 14:00:55このへんがやっぱり妥当
制御構造ifとかなんか続編のゲームっぽいが
「if文」があまりよくないのは「文は値を返さない」というのが全言語間で「なんとなく」共有されてるから
発言者が if は値を返すというのを理解していない可能性を仄めかしている
レシーバ無しメソッドが関数と根強く呼ばれるのと同じようなイメージ
0909デフォルトの名無しさん
2010/01/24(日) 14:14:100910デフォルトの名無しさん
2010/01/24(日) 14:22:230911デフォルトの名無しさん
2010/01/24(日) 14:28:130912デフォルトの名無しさん
2010/01/24(日) 14:28:18『未定義』だと宣言済みなのと訳わからなくなるから
『未代入』の方がいいかも
>>908
同意
更にRubyのifは値を返すし
0913デフォルトの名無しさん
2010/01/24(日) 14:29:31ステートメントなら返却値がないのは当然だってわかるだろ
0914デフォルトの名無しさん
2010/01/24(日) 14:29:47x % y って何を表してんの?
0915デフォルトの名無しさん
2010/01/24(日) 14:31:54String#%調べれ
Stringのインスタンスメソッド%だ
x.%(y) だな
0916デフォルトの名無しさん
2010/01/24(日) 14:39:46Javaではif文
rubyではif式
と呼ぶ。
この認識であってるのかな?
というか皆そんなことまで考えて言葉選んでたのか。
自分の適当さ加減に気付かされた気がする
0917デフォルトの名無しさん
2010/01/24(日) 14:51:290918デフォルトの名無しさん
2010/01/24(日) 15:03:15if 式というか、Ruby の if は他の C のような言語とは違って式として機能する、が正確
それを踏まえて if のことを if 式と呼ぶか if 文と呼ぶか if とだけ呼ぶかは自由
とりあえずは、Ruby の if は値を返すということだけ憶えてもらえればいい
他にはどういうのがあるのかな、と思ったときには「制御構造」という分類呼称を思い出してくれ
これに分類されるものはいわゆる後置 if のような修飾子以外、式で値を返す
それと、当初の話題だったはずなのに既に忘れ去られてるがスコープを作らない
時々言われてるのは「while true はスコープを作らないが loop はスコープを作る」だが
これは単にブロックつきメソッドであるかどうかの違いに過ぎない
loop は制御構造ではなく関数的メソッド、つまり Kernel#loop で、each がスコープを作るのと完全に同一の理屈
>>917
そりゃ君だけだ
0919デフォルトの名無しさん
2010/01/24(日) 15:14:57ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
"if_method"
奥が深い
0920デフォルトの名無しさん
2010/01/24(日) 15:28:190921デフォルトの名無しさん
2010/01/24(日) 15:32:11青木さんは天才なんだおる。
0922デフォルトの名無しさん
2010/01/24(日) 15:35:09話し手も聞き手も意味が分かってれば
0923デフォルトの名無しさん
2010/01/24(日) 15:45:40少なくとも俺はそこまでの域には達してないw
読み書きするときに留意はしてるけど
0924デフォルトの名無しさん
2010/01/24(日) 16:10:38いちいち単語ごとに相手も自分と同じ認識をしているか
確認するのはメンドクサイ。
かといって曖昧にすると情報に齟齬が発生する
だから定義をつくる事と定義を守る事と定義を周知する事は大事だと思う
0925デフォルトの名無しさん
2010/01/24(日) 16:27:39返値が関わるような話なんてしてなかったところでぐだぐだするのは
まるでグローバル変数みたいだな
0926デフォルトの名無しさん
2010/01/24(日) 16:52:14それは1行目と2行目に繋がりが見えない
なんだっていいなら意味の疎通は不問だろう
意味意図が通じるのが第一なら表現は一考されるべき
0927デフォルトの名無しさん
2010/01/24(日) 16:56:210928デフォルトの名無しさん
2010/01/24(日) 17:12:15三項演算子要らないんだな
0929デフォルトの名無しさん
2010/01/24(日) 17:25:30Cっぽく書きたい人のためにあるんだろうな > 三項演算子
0930デフォルトの名無しさん
2010/01/24(日) 17:31:25って書くのがRubyっぽいのか?
0931デフォルトの名無しさん
2010/01/24(日) 17:43:519と8で結果の違うことをコードに入れたくないね
0932デフォルトの名無しさん
2010/01/24(日) 17:44:41うん、まあ、一応は
一応は、ね
条件演算子はそれこそメソッド引数やらリテラル埋め込み記述やらに使う
短く見やすく記述できることがウリだが、実用上はカッコ連打で結構微妙な状態に陥ることが多い
「どうせ来週の版では記述増えてifに置き換わってるんだから最初からifで書こうぜ」みたいな感じはなくもない
0933デフォルトの名無しさん
2010/01/24(日) 17:51:50じゃあ1.9使うの禁止な
0934デフォルトの名無しさん
2010/01/24(日) 17:52:36返せないのは制御を返さないreturnとかbreakとかだけ。
という意味で>>907に引用されている文が一番正確。
0935デフォルトの名無しさん
2010/01/24(日) 17:57:010936デフォルトの名無しさん
2010/01/24(日) 18:03:530937デフォルトの名無しさん
2010/01/24(日) 18:25:38変わってるのはブロックのスコープで、if関連は変わってないのでは?
0938デフォルトの名無しさん
2010/01/24(日) 18:39:31余計分からなくなってきた
責任取ってくれ
0939デフォルトの名無しさん
2010/01/24(日) 18:44:440940デフォルトの名無しさん
2010/01/24(日) 18:48:410941デフォルトの名無しさん
2010/01/24(日) 18:51:17初心者のうちに式とスコープを勉強しようとすると混乱してわけわかめになることについては責任もたん
0942デフォルトの名無しさん
2010/01/24(日) 22:15:59いわゆる全角スペースも除去するにはどうしたらいい?
utf8のスペースが" "と" "しかないなら
sub /^[\s ]+/, "" て書くけど…
0943デフォルトの名無しさん
2010/01/24(日) 22:34:21http://ja.wikipedia.org/wiki/スペース に載ってるスペース文字はOK
0944デフォルトの名無しさん
2010/01/24(日) 23:38:23U+200B ZERO WIDTH SPACE
U+FEFF ZERO WIDTH NON-BREAKING SPACE (別名BYTE ORDER MARK)
は[[:space:]]で認識されなかった。
0945デフォルトの名無しさん
2010/01/25(月) 02:51:21>>862
2.iniはtempではなく最初のフォルダにありました
>>850の
require 'win32ole'
fso = WIN32OLE.new('Scripting.FileSystemObject')
fso.GetAbsolutePathName('2.ini')
を実行しましたが、'2.ini'を適当な文字列にしても、スクリプトの実行場所にあるファイルとしてpathが返ってくるのでいまいちよくわかりません。
>>841を何度か実行しましたが、毎回いくつかのファイルが削除されていき、たまにコピーされて数が増えているのもあります。
うまく連番になるときとならないときがあります。
0946デフォルトの名無しさん
2010/01/25(月) 09:17:190947デフォルトの名無しさん
2010/01/25(月) 11:39:34trunk の[[:space:]]とかの定義は http://unicode.org/reports/tr24/ を参照しているのだが、
どうもZWNBSPは制御文字扱いらしい
0948デフォルトの名無しさん
2010/01/25(月) 11:56:310949デフォルトの名無しさん
2010/01/25(月) 14:16:06ZWNBSPはBOMじゃないってば!
0950デフォルトの名無しさん
2010/01/25(月) 19:43:38式 ? 真の時 : 偽の時
式 and 文
式 or 文
文 if 式
文 unless 式
if 式
then 文
else 文
end
if 式 (then)
文
else
文
end
unless 式 (then)
文
end
たくさんあって、悩むw
0951デフォルトの名無しさん
2010/01/25(月) 21:22:20インスタンス変数ならattr_accessorがありますが、クラス変数の場合は自前でゲッターメソッドを定義するしかないのかな?
0952デフォルトの名無しさん
2010/01/25(月) 21:36:00オブジェクト外から内部の変数にアクセスする仕組みというのはRubyでは全く存在しません
メソッドの返り値に明示的に指定します
なお、アクセサのある言語からきた人を上っ面だけ騙してRubyを嫌わせるために
def hoge
@hoge
end
と3行書く代わりにattr_reader :hogeと書けるという短縮形が用意されています
0953デフォルトの名無しさん
2010/01/25(月) 21:50:560954デフォルトの名無しさん
2010/01/25(月) 21:54:34ありがとうございます。
インスタンス変数の場合はattr使うのは分かるのですが、クラス変数にはそういう文法が無いのですか?
その都度自前でゲッターを作るのですか?
0955デフォルトの名無しさん
2010/01/25(月) 21:57:03消えるわけ無いだろ…ほとんどの既存プログラムが動かなくなる。
Railsとかフレームワークでもごりごり使ってるのに。
0956デフォルトの名無しさん
2010/01/25(月) 21:58:28> インスタンス変数の場合はattr使う
だから使わないんだって
0957デフォルトの名無しさん
2010/01/25(月) 22:04:59>>951みたいに混乱するからさ
やっぱなくしたほうがいいと思うなあ
本物のアクセサとしての機能を提供してるわけじゃないし
(セッターとゲッター設定したのに○○できません、はもうお約束)
内部変数と同じ名前のメソッドを提供するということにどれほどの意味があるのか
内部変数関係なく、わかりやすい名前と使いやすい引数のメソッド作れよ
0958デフォルトの名無しさん
2010/01/25(月) 22:24:34俺の作ってるライブラリは動くぞー
attr系はひとつも使ってない
「rdocでの扱いがキモいから」という理由が主だが
0959デフォルトの名無しさん
2010/01/25(月) 22:29:27てか、使いまくってる
0960デフォルトの名無しさん
2010/01/25(月) 22:35:06Railsプロジェクトは異常なほど開発サイクル早いからすぐに対応するだろう
ruby2.0を作ろう
0961デフォルトの名無しさん
2010/01/25(月) 22:39:42まずクラス変数自体あんまり使わない
それでもクラス変数のアクセサメソッドを作りたいんだったら手で書くか
それかattr系メソッドを自分で定義するか
class Module
def attr_class_reader(*names)
names.each{| name |
module_eval "def #{name}; @@#{name}; end"
}
end
end
0962デフォルトの名無しさん
2010/01/25(月) 22:45:23プッ
0963デフォルトの名無しさん
2010/01/25(月) 22:55:380964デフォルトの名無しさん
2010/01/25(月) 23:22:080965デフォルトの名無しさん
2010/01/25(月) 23:29:42これは嘘だろ。クラス変数を外から参照することはあまり無いけど。
0966デフォルトの名無しさん
2010/01/25(月) 23:49:51大体はクラスオブジェクトのインスタンス変数でどうにかごまかせる
0967デフォルトの名無しさん
2010/01/25(月) 23:50:41クラス変数は使わないな
0968デフォルトの名無しさん
2010/01/26(火) 00:20:100969デフォルトの名無しさん
2010/01/26(火) 00:36:36そのオブジェクトのインスタンス変数はクラス変数と実用上の違いはない
クラスインスタンス変数という機構があるわけじゃないぞ
irb>
class CIns
@hoge=0
def self.hoge; @hoge; end
end
irb> p CIns.hoge
0
irb> class CIns2 < CIns; end
irb> p CIns2.hoge
nil
irb>
class CCval
@@hoge=0
def self.hoge; @@hoge; end
end
irb> p CCval.hoge
0
irb> class CCval2 < CCval; end
irb> p CCval2.hoge
0
0970デフォルトの名無しさん
2010/01/26(火) 00:50:43流れ上使わないようにしろってのがwwww
Rubyのクラスインスタンス変数は、ふつう、attrとselfを使ってこう書く
class C
class << self; attr_accessor :hoge; end
end
これを見たら「あークラスインスタンス変数作ってるー」と思ってくれ
見慣れないとナニを意図してやってんだかさっぱりわからん謎の記述だ
0971デフォルトの名無しさん
2010/01/26(火) 00:53:210972デフォルトの名無しさん
2010/01/26(火) 01:01:00Smalltalkにはクラスインスタンス変数(class instance variables)がナチュラルに存在してるぞ
0973デフォルトの名無しさん
2010/01/26(火) 01:16:390974デフォルトの名無しさん
2010/01/26(火) 01:23:560975デフォルトの名無しさん
2010/01/26(火) 01:30:37それって1.9だとクラス変数もnilになるんじゃないの?
0976デフォルトの名無しさん
2010/01/26(火) 07:17:13>あーうん、attr_* は初心者は使わないのがいいぞ
>>>951みたいに混乱するからさ
まるで意味がわからない。
951ってこれだよね?
> 外からクラス変数にアクセスするにはどうすればいいのでしょうか?
> インスタンス変数ならattr_accessorがありますが、クラス変数の場合は自前でゲッターメソッドを定義するしかないのかな?
別に混乱しているようにはとても思えないし、初心者がattr_*を使わないほうがいい理由になっているとも思えない。
「attr_*を使わないほうがいい」なんて意見、初めて聞いた。こんなバカ発言、だれがいいだしたの?
0977デフォルトの名無しさん
2010/01/26(火) 08:04:12だから継承先で書き換えられるかもって言ってんじゃんよ
そんなことはないとか、むしろそう使うつもならどんどんクラス変数使ってください
ところで次スレって980ですか
0978デフォルトの名無しさん
2010/01/26(火) 08:54:28attrは設定メソッド名と参照メソッド名と内部変数名を統一してしまう
この2者・3者に共通して妥当な名称を、俺はそんなに思いつく自信がない
0979デフォルトの名無しさん
2010/01/26(火) 09:14:47クラス変数の扱いは1.9の途中から1.8相当に変更されて1.9.1に至ってるけどちゃんとアップデートしてる?
0980デフォルトの名無しさん
2010/01/26(火) 18:40:40>名前重要、と言ってるすべての人が、attrを実質的に否定してると思う
そんなのまるで聞いたことないので、具体的に誰がどう否定しているのか紹介してくださいおねがいします。
> attrは設定メソッド名と参照メソッド名と内部変数名を統一してしまう
> この2者・3者に共通して妥当な名称を、俺はそんなに思いつく自信がない
統一したらなんかまずいんでしょうか。
def name
@value
end
のほうがよっぽどきもいように思います。
0981デフォルトの名無しさん
2010/01/26(火) 18:47:450982デフォルトの名無しさん
2010/01/26(火) 18:56:23日本語じゃないから食い違いに気がつけないだけかもしれんが
0983デフォルトの名無しさん
2010/01/26(火) 19:04:250984デフォルトの名無しさん
2010/01/26(火) 19:20:19通常のインスタンスメソッド一覧に混ぜるタイプのマニュアルライブラリはない?
0985デフォルトの名無しさん
2010/01/26(火) 19:25:32長さを得るメソッドがlengthで長さを保持するインスタンス変数が@lengthって自然だと思うけど
0986デフォルトの名無しさん
2010/01/26(火) 19:47:36でも@length?にはできないせいattrが使えないし
細かい違いよりもattrの便利さのほうが上回るからlengthに流れてしまう
別にattr否定派というわけではないけど
こういったように名付けに縛りが生まれるというか消極的になるのはattrの罪だと思う
0987デフォルトの名無しさん
2010/01/26(火) 19:51:15青木峰郎氏によると、unless, untilはオススメらしい。
http://jp.rubyist.net/magazine/?0010-CodeReview#l13
0988デフォルトの名無しさん
2010/01/26(火) 19:52:25> 細かい部分だけど、長さを得るメソッドならlength?のほうがより良いよね
なんで?「長さ」なら具体的な数値を返すべきだと思うけど。
基本的に「?」が付くメソッドは真偽値(True or False)を返すというルールだったはずだが。。
0989デフォルトの名無しさん
2010/01/26(火) 19:53:420990デフォルトの名無しさん
2010/01/26(火) 19:57:15指摘thx、激しく勘違いしている>>986はなかったことに
0991デフォルトの名無しさん
2010/01/26(火) 20:52:03そもそもrubyはメソッドをプロパティのように見せることで、
オブジェクトの安全性は保ちながら読み手には簡潔に見える、ってのがコンセプトの一つだったような。
Railsなんてその最たる例だ。
0992デフォルトの名無しさん
2010/01/26(火) 20:57:450993デフォルトの名無しさん
2010/01/26(火) 20:58:15とか思ったりなんかしちゃったりする今日この頃
0994デフォルトの名無しさん
2010/01/26(火) 21:10:480995デフォルトの名無しさん
2010/01/26(火) 22:05:23Ruu語と空目するtogther
0996デフォルトの名無しさん
2010/01/26(火) 22:06:590997デフォルトの名無しさん
2010/01/26(火) 22:10:55gui とか書くとき form.listbox とかで何か値返してきたら
住所不定小包とどいたけど、これじゃない・・・とかか?
0998デフォルトの名無しさん
2010/01/27(水) 09:38:000999デフォルトの名無しさん
2010/01/27(水) 13:31:081000デフォルトの名無しさん
2010/01/27(水) 13:49:4010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。