Ruby 初心者スレッド ..
767:デフォルトの名無しさん
10/01/18 23:55:48
こういうことだろうか。
to = data.each_pair.inject(from) {|result, pair| result.gsub(pair[0], &pair[1]) }
768:デフォルトの名無しさん
10/01/18 23:59:30
これではどう?
a = 'abc def'
data = [['(\w+)', '<\1>'], ['(> <)', '> < \1 > <']]
data.each{|reg, rep| a.gsub!(/#{reg}/, rep)}
a => "<abc> < > < > <def>"
769:デフォルトの名無しさん
10/01/19 00:09:09
>>768
なにそのわかりやすくしようとする気概をぜんぜん感じない例
770:デフォルトの名無しさん
10/01/19 00:10:57
>>765
766-768が書いているようにgsub!の第2引数で置換パターンを書いたほうが
単なるstringでパターンを渡せるので簡単だと思う
766,767が書いてるパターンの前の '&' って
どういう意味?
771:デフォルトの名無しさん
10/01/19 00:21:13
>>770
URLリンク(www.ruby-lang.org)
772:デフォルトの名無しさん
10/01/19 00:26:03
なるほどProcを渡してるのねthx
俺には768の方がわかりやすいな、例は見づらいが
773:デフォルトの名無しさん
10/01/19 00:42:38
だって先生が gsub はブロック使えって言ったんだもん言ったんだもん言ったんだもん
>>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"
思ったことに近いことができましたーうおー
助かりましたせんきゅうです
774:デフォルトの名無しさん
10/01/19 03:46:28
1byte文字以外をマッチする方法を教えてください
s="123123456456"
s.gsub!(/〜/){|c|
uni_enc(c)
}
p s
=>
123%uFF11%uFF12%uFF13456%uFF14%uFF15%uFF16
みたいに1byteじゃない文字だけ変換して置換したいです
よろしくお願いします
775:デフォルトの名無しさん
10/01/19 06:56:24
$KCODE='s'
s="123123456456"
s.gsub!(/./){ |ch|
(ch.length==2) ? "(#{ch})" : ch
}
puts s;
776:デフォルトの名無しさん
10/01/19 07:36:20
1バイトじゃない文字だって言ってるのにわざわざ2バイトをチェックするとはこれいかに
777:デフォルトの名無しさん
10/01/19 14:27:57
# coding: sjis
# Ruby1.9以降か正規表現エンジンに鬼車を使用
s="123123456456"
s.gsub!(/[^\p{ASCII}]/){|c|
"%u"+c.encode('utf-8').ord.to_s(16)
}
p s
778:デフォルトの名無しさん
10/01/19 17:08:32
test = {"うし"=>5, "うま"=>3, "うし"=>1, "うし"=>2, "うま"=>4}
test.each{|key, val|
}
これを実行したら最後二つの"うし"=>2と"うま"=>4しか処理が実行されないんですが
キーの要素が一緒だと前にある奴は消されてしまうんですか?
またこれをハッシュの数分だけ実行させることはできないんでしょうか?
779:デフォルトの名無しさん
10/01/19 17:22:15
>778
ハッシュの意味を勉強してこい
780:デフォルトの名無しさん
10/01/19 17:30:11
配列の配列を使う方法
test = [ ["うし", 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) } }
781:デフォルトの名無しさん
10/01/19 17:44:49
文字列
a0-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]]
782:デフォルトの名無しさん
10/01/19 17:51:33
只今から上位エスパー召喚の儀を執り行う
783:デフォルトの名無しさん
10/01/19 17:54:09
"a0-0" → [1, 0, 0, 0]
"a2-2" → [0, 0, 0, 0]
"a2-3" → [0, 0, 1, 1]
という対応があるように見えるのだが、2つめは [0, 0, 1, 0] ではない?
どういうルール?
784:デフォルトの名無しさん
10/01/19 17:55:50
>>782
失敗してるぞw
785:デフォルトの名無しさん
10/01/19 17:58:38
こうだな
a=["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]]
786:デフォルトの名無しさん
10/01/19 18:00:09
>>782
成功したぞw
787:785
10/01/19 18:00:44
ごめん。こうだったね。
> b.push[$~[1].to_i][$~[2].to_i] = 1
b[$~[1].to_i][$~[2].to_i] = 1
788:デフォルトの名無しさん
10/01/19 18:02:57
>>783
a0-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]です。
このようなルールです。
789:デフォルトの名無しさん
10/01/19 18:26:34
>>785
ありがとうございます。
この方法で問題なく解決しました。
790:デフォルトの名無しさん
10/01/19 22:18:49
こういう3択クイズで選んだ結果をファイルに出力して、解答ファイルと照らし合わせる場合
どうすればいいのでしょうか?
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"
791:デフォルトの名無しさん
10/01/19 22:32:03
>>790
Rubyは基本、HTTPのクエリ文字列とかを隠蔽しない
そのときどんなデータがどのように送られてくるものなのか、HTTPの勉強をするといいぞ
792:デフォルトの名無しさん
10/01/19 23:06:30
>>791
ありがとうございます
勉強して何とかやってみます
793:デフォルトの名無しさん
10/01/20 08:35:06
>>791
事実だから仕方ないが、あんま威張ることじゃないけどねえ
Railsで作ってRailsで表示してRailsで受け取れば抽象度高くできそうだが、もうCGIではないな
794:デフォルトの名無しさん
10/01/20 08:36:21
そりゃ言語としてWEBだからって何かするのはPHPくらいだろう。
795:デフォルトの名無しさん
10/01/20 08:49:20
あほまるだし
796:デフォルトの名無しさん
10/01/20 12:53:24
質問です!
文字列を受け取ってスペースと記号を削除した文字列を返すメソッドを作りたいんですが
どうすればいいでしょうか?
ちなみに条件はgsubメソッドをつかうこと
記号は全角も半角も含む(","とか"。"とか"?"とか"?"とか)
どなたかお願いします
797:デフォルトの名無しさん
10/01/20 12:56:49
>>796
Rubyの宿題教えてください。2限目
スレリンク(tech板)
798:デフォルトの名無しさん
10/01/20 13:10:06
>>797
スレ違いでしたね
すいません
わざわざありがとうございます
799:デフォルトの名無しさん
10/01/20 13:48:31
RDEは軽いからお手軽なGUIのirbみたいなイメージで
自作メソッドとかの動作確認的な風に使うな
800:デフォルトの名無しさん
10/01/20 14:45:43
railsを勉強しようと思うんですが、初心者向けで
お勧めの本はありますか?あるいは、これは読んで
おくべき本でも構いません。
Webでいろいろ読んだのですが、modelのassociation
やAjaxが難しく感じました。
801:デフォルトの名無しさん
10/01/20 14:50:41
うむ、スレのテンプレすら読めんような注意力では何もかもが難しかろう
【Ruby】Ruby on Rails Part8
スレリンク(php板)
802:デフォルトの名無しさん
10/01/20 14:53:24
Railsの初心者スレってありそうでなさそうで需要ありそうだがやっぱめんどいからなしで
803:デフォルトの名無しさん
10/01/20 16:16:05
>>801
ありがとう。
804:デフォルトの名無しさん
10/01/20 16:21:54
>>800
初心者が最低限これだけあればまずはなんとかなる!って書籍を3つ。
というか俺が実際にRails初心者レベルで仕事で使った本
・RailsによるアジャイルWebアプリケーション開発
URLリンク(www.amazon.co.jp)
・Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応
URLリンク(www.amazon.co.jp)
・Railsレシピブック 183の技
URLリンク(www.amazon.co.jp)
あとは、webサイトだけど公式のガイド。ちょっとしたわからんことはまずこれ見たら大体すむ
Ruby on Rails guides
URLリンク(guides.rubyonrails.org)
毎回聞かれてるんで、Railsスレテンプレに入れといていいと思うんだ・・・
805:デフォルトの名無しさん
10/01/20 16:23:43
質問いいでしょうか?
Ruby 1.8.7にて、ブロックつきメソッドの呼び出したブロックの返り値を得たいのですが、
ブロック内で
return "UNKO!!"
すると、
unexpected return (LocalJumpError)
と言われます。
break "UNKO!!"
では問題ないようなのですが、これはこういうものなのでしょうか?
806:デフォルトの名無しさん
10/01/20 17:03:26
>>804
紹介ありがとう
とりあえずそれらと公式サイトで始めてみます
807:デフォルトの名無しさん
10/01/20 17:04:09
>>805
トップレベルでreturn使っていない?
def f(a)
a.each{ return 1 }
end
a = [1,2,3]
f(a) # これはだいじょうび
a.each{ return 1 } # でもこれはダメ
808:805
10/01/20 17:50:49
>>807
ありがとうございます。
エラーでない方法をお聞きしたいというよりも、もう少し具体的に聞くべきでした。
こちらの期待する動作としては、
”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 } # でもこれはダメ
809:デフォルトの名無しさん
10/01/20 18:01:04
breakはブロックの脱出、returnはメソッドの脱出ってこと
だからそのfの中でretrunを使ったら内部ブロックでだろうとfを脱出する
同様にこれも無理
def f
break
end
f
810:デフォルトの名無しさん
10/01/20 18:09:10
ある案件で始めてRubyをいらうことになったのですが、
訳がわからず困っています。
取り合えず、"RailsによるアジャイルWebアプリケーション開発”のT部
HelloWorldプログラムを作成して動かすまでを試してみて、
ああ、PHPでSmarty使ってMVCモデルで作成するのを自動、徹底
してる感じだなと思い、そのまま本チャンプログラムに挑みましたが・・・
・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。
・ブラウザに表示してソースコードを見てみると、1万行近い
ソースコードで表示と一致していない。
・ブラウザのURL表示がページ遷移しても常に一緒。
と、始めて見る構成でした。
私のRubyの理解が足りないと思い、U部以降を読み進めようと思いましたが
このプログラム構成が特殊だから、参考書読み進めても効果は薄く
それよりプログラムの解析を続けるべきでないかと思い直しました。
皆さんに質問ですが、こういった構成は一般的なのですか?
それなりにある手法ならば、読むべき参考書、検索のキーとなる
単語を教えていただけたらと思います。
要領得ない質問ですみませんがお願いします。。。
811:デフォルトの名無しさん
10/01/20 18:17:27
>>810
お前には絶対に無理だ
812:sage
10/01/20 18:20:39
せめて日本語で頼む。
813:デフォルトの名無しさん
10/01/20 18:31:08
>>804の罪は重い
814:デフォルトの名無しさん
10/01/20 18:34:15
これは俺でも煽る
直前読めずにスレのルールすら理解できないようでは駄目だろうな
815:810
10/01/20 18:51:22
>>814
>関連スレやURLは>>2-5あたりを見てください。
>Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
これですか?
もっと詳細に質問すべきだったのかもしれませんが、
個々のプログラムの質問以前に全体として???だったもんで。。。
>>810,813
つまり、初心者レベルでないから私には到底無理ってことですか?
それならそれで上にそう報告しますので助かります。
それでもやれって言われそうですが・・・。
逆に、参考書読んだらわかるようなことを質問するなというのであれば
すみません。
参考書、全部読んでみます。
取り合えず、初心者参考書レベルの問題なのかだけでも教えて下さい。
816:デフォルトの名無しさん
10/01/20 19:11:01
>>815
君が書いてる質問の中に、Rubyそのものに関する話題は一切ない。
Railsスレへ行きなされ。
>>813が書いてるのは、たぶん、Railsスレへ行けということが示されてるのに
わざわざ餌を撒いてここに君を留まらせた罪が重いってこと。
817:810
10/01/20 19:13:22
>>816
そうですね。。。
すいません。
Railsスレにいきます。
スレ汚し失礼しました。
818:デフォルトの名無しさん
10/01/20 19:21:36
>>817
読んでないことを期待するが、40パーセントくらいしか悪くないのでそれほど謝る必要はない
残り40パーセントは>>804で、残り20パーセントはたまたま重なったタイミング
819:デフォルトの名無しさん
10/01/20 19:39:51
>>808
eachごとの結果がほしいのなら
ブロックの外で定義した配列に
欲しい結果を入れておく。
またはブロックのto_aとか
701へのレス703, 709参照。
820:804
10/01/21 10:54:34
俺の名誉のために言っておくが、>>810の言っていることは、
"RailsによるアジャイルWebアプリケーション開発”のサンプルコードの話じゃなくて、
>>810が取り組んでる仕事のコードだと思うぞ
821:804
10/01/21 10:55:31
ごめん >>816-818読んでなかった。餌まいてスマソ
822:805
10/01/21 10:56:56
ありがとうございます!
>>809
> breakはブロックの脱出、returnはメソッドの脱出ってこと
ああ!それです。まさにその1行が聞きたかったのです。
俺はもっとよい聞き方を憶えないといけないな・・・
823:デフォルトの名無しさん
10/01/21 11:43:10
こうして>>804はプライドも外聞もズタズタになったのであった。
824:デフォルトの名無しさん
10/01/21 12:57:39
1. ruby -e 'puts ARGF.read' file.txt
2. ruby -e 'puts $<.read' file.txt
1.の文では正しくfile.txtの内容が表示されるのですが、
2.の文で「指定されたファイルが見つかりません。」と怒られます。
リファレンスマニュアルの$<の項には
「つまり定数 ARGF の別名。 」
と書いてあるので、
1.と2.で同じ結果を期待したんですけど。
どこが間違ってるんでしょうか?
Ruby1.9.1でOSはWindowsXPです。
よろしくお願いします。
825:デフォルトの名無しさん
10/01/21 13:06:28
あ,自己解決しました。
Windowsの<とか>とかってエスケープするか
""で括らなきゃいけなかったんでした。
1. ruby -e "puts ARGF.read" file.txt
2. ruby -e "puts $<.read" file.txt
または
2. ruby -e 'puts $^<.read' file.txt
なら同じ結果になりますね。
スレ汚しスマソ。
826:デフォルトの名無しさん
10/01/21 13:10:22
>>824
「指定されたファイルが見つかりません。」を出してるのは実はcmd.exeだ
「<」を誤認識してる
ということで cmd.exe から < をエスケープすればよい
cmd.exe のエスケープ文字は ^ だから、
ruby -e 'puts $^<.read' file.txt
827:816
10/01/21 14:12:27
別に810や804を責めたいわけでもないんだが、質問と回答は
適切な場所でやった方がいいよ、ってことで。
828:デフォルトの名無しさん
10/01/21 14:15:52
>>826
すみませんすみません
ありがとうございました。
829:デフォルトの名無しさん
10/01/21 14:33:03
>>810
>・まず、.rhtmlがTopページしかなく、MVCとも.jsファイルばかり。
>・ブラウザに表示してソースコードを見てみると、1万行近い
> ソースコードで表示と一致していない。
>・ブラウザのURL表示がページ遷移しても常に一緒。
> と、始めて見る構成でした。
これはAjaxでページを作ってるんだろう。Railsうんぬんはさほど関係ない。
> 私のRubyの理解が足りないと思い、
いや、JavaScriptやAjaxの知識が足りないだけだと思う。
830:デフォルトの名無しさん
10/01/21 14:34:48
>>801
831:デフォルトの名無しさん
10/01/22 17:50:52
riっていらないよね
832:デフォルトの名無しさん
10/01/22 17:58:09
rubygem パッケージマニュアルとしての ri に関しては、「とりあえず入れておく」というようなもんでもないな既に
現時点で ri を利用してないのなら、 --no-ri で飛ばしてOK
基本的にロクなこと書いてないしソースを grep したほうがおおむね速いので、rdoc もなくてもいい
rdoc がきっちりしているライブラリのみ、マニュアル読む機会があるときだけ rdoc コマンドで構成するか、
あるいはネットで公開されてる rdoc を読めばいい
833:デフォルトの名無しさん
10/01/22 19:04:47
refeはいるけど、riはいらない
834:デフォルトの名無しさん
10/01/22 19:13:46
デフォで--no-ri -no-rdocしても特にデメリットはないね
インストール速いしディスクアクセスも少なくて済むしいいことだらけ
835:デフォルトの名無しさん
10/01/22 19:37:04
俺は.gemrcに書いたが、デフォルトでそうであれ、とまでは思わない。
836:デフォルトの名無しさん
10/01/22 19:41:39
自分の作るライブラリにはRDocをていねいに書く
自分がインストールするライブラリではrdocは使わない
837:デフォルトの名無しさん
10/01/22 19:46:04
日本語でいいならコメント書くんですがー
838:デフォルトの名無しさん
10/01/22 19:54:48
>>837
あちらさんの使ってるフォント自体に日本語文字がないから、本気で表示が崩れるぞ
外国語の文字も適当に表示できるフォントの認知度が高いのは日本くらいだ
839:デフォルトの名無しさん
10/01/22 19:59:50
とりあえず日本語でコメントを書きまくり、英語の得意な人がプロジェクトに参加してくれることを祈るというのはどう
英語でコメント書くの大変だって言うような人が作るライブラリなんて、どうせ最初に使うのは日本人が主だろうしさ
840:デフォルトの名無しさん
10/01/22 20:14:17
そうだな、とりあえず日本人向けオンリーででもまず本体クオリティ上げるのが第一かもしらん
英語ドキュメント書けないからと言って諦めるのはもしかしたら勿体無さ過ぎるかもしれない
841:デフォルトの名無しさん
10/01/22 22:08:16
質問です。ある1つのディレクトリ内にあるファイルを更新時間順にソートしてファイル名を連番(数字のみ)にしようと以下のコードを書きました。
def 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です。
ご助力よろしくお願いします。長々と失礼しました。
842:デフォルトの名無しさん
10/01/22 22:40:56
> 存在しないファイル名が混じっていました
存在します
または、UNICODEファイル名です
UNICODEファイル名だった場合、Rubyから扱うことはできません
843:デフォルトの名無しさん
10/01/22 23:30:17
てか存在しないファイル名とか教えてくれりゃ結構一発だったり
844:デフォルトの名無しさん
10/01/22 23:33:11
察してください、まで読んだ
845:デフォルトの名無しさん
10/01/23 00:28:53
>>842
>>843
ファイル名ですが、エクスプローラーやコマンドプロンプトのdirで確認できずにrubyで検出されたのは
6.jpg
2.ini
の二つです。
846:841
10/01/23 00:29:59
失礼
>>845の書き込みは>>841の者です。念のため。
847:デフォルトの名無しさん
10/01/23 00:59:11
本当に存在しないファイルなの?
そのディレクトリで
system('start 6.jpg')
ってやればjpegに関連付けられたアプリで 6.jpg が開くから確かめてみたら?
848:デフォルトの名無しさん
10/01/23 01:01:01
あとは
dir /x
とか
849:デフォルトの名無しさん
10/01/23 01:08:43
>>847
6.jpgについてはエラーが出ましたが、2.iniは開かれました。
>>848
6.jpg、2.iniいずれも出ませんでした
850:デフォルトの名無しさん
10/01/23 01:16:26
2.iniがでてきたってことは、ファイル自体はあるってことだよね?
でもdirでは出てこないのか・・・謎だ・・・
require 'win32ole'
fso = WIN32OLE.new('Scripting.FileSystemObject')
fso.GetAbsolutePathName('2.ini')
とかしてみたら?
851:デフォルトの名無しさん
10/01/23 01:27:40
>>850
さきほどまでのフォルダではなくtempフォルダのパスが出ました。
今度はそのtempフォルダで start 2.ini を実行しましたが開かれず、dirでも見つかりませんでした
852:デフォルトの名無しさん
10/01/23 01:35:45
とりあえずスクリプトに
$KCODE = 'SJIS'
を付けて実行してみるべき
FileSystemObjectで見えているパスはWindowsで見えているパスなので
fso経由で2.iniが見えているのにdirで見えないのは、ちょっと不思議
853:デフォルトの名無しさん
10/01/23 01:48:34
$KCODE = "SJIS"を付けてみましたが特に変わりないようです
(ただ、コンソールの作動場所のせいかスクリプトの保存場所のせいかまた別のパスが返ってきましたが)
>>850のスクリプトはなにを意味するのですか?2.iniの代わりに適当な文字列を入れてもパスが返ってくるのですが・・・
854:デフォルトの名無しさん
10/01/23 02:49:29
まだいるかな?
attrib *.*
はどう?
855:デフォルトの名無しさん
10/01/23 02:52:21
なんかの拍子にシステムファイルになったんじゃない?
フォルダオプション→表示→保護されたオペレーティング〜
のチェック外してみ
856:デフォルトの名無しさん
10/01/23 14:46:40
dir で出てこなくて dir /a で出てくるなら
存在はしてるけど何らかの属性がついてて、そのせいでエクスプローラーに表示されないだけだな
857:デフォルトの名無しさん
10/01/23 15:10:59
./hoge.rb を実行するときに例えば ./hoge.rb --debug のようにしてデバッグモードにして
そのときだけ状態メッセージを print するためにはどのようにするのは ruby 的にエレガントでしょうか?
858:デフォルトの名無しさん
10/01/23 15:12:05
もはやRubyとは関係ないな
859:デフォルトの名無しさん
10/01/23 15:43:41
>>857
読み手にとっていちばん妥当なもの
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) を時々見る
860:デフォルトの名無しさん
10/01/23 17:54:08
>>859
ありがとうございます!
後者のDをDoyagaoとして使いたいと思います(違)^A^K二つの視点から例を出していただきとても参考になりました!
861:デフォルトの名無しさん
10/01/23 18:59:49
>>841です
>>854-856
2.iniがシステムファイルとして存在していました。相変わらず6.jpgは見つかりません。
862:デフォルトの名無しさん
10/01/23 19:46:16
どこにだよ
tempか?
最初のフォルダの中のファイルは全部連番に変わったのか?
tempのファイルも全部か?
863:デフォルトの名無しさん
10/01/23 21:43:18
ブロックスペシャルファイル(readするとバイト列が得られます)の長さを
調べたいのですが、実際にreadすることなしにこれを実現する方法はありますか?
パッと思いついたのは、openしてからファイルの末尾にseekして
先頭からのpositionを得るという方法ですが、他にはありますか。
864:863
10/01/23 21:46:20
例えばこんな感じです:
File.open("/dev/sda") do |io|
io.seek 0, IO::SEEK_END
io.pos # /dev/sda のバイト列の長さ
end
865:デフォルトの名無しさん
10/01/23 21:49:18
関数の外で@も@@も付けずに定義した変数はいったいどこに保存されるのでしょうか?
x = 10
def func
x = 20
end
func
puts x #=>10
これがxが20にならないので、最初に定義したxはグローバルには見えないどこかに閉じ込められてるのかな。
866:デフォルトの名無しさん
10/01/23 21:50:04
>>863
完全にUNIX/Linuxプログラミングの話題じゃまいか
867:デフォルトの名無しさん
10/01/23 21:51:41
>>866
を、Rubyで実現するにはどうすればいいですかという話だろう
868:デフォルトの名無しさん
10/01/23 21:53:55
>>865
変数のスコープという概念を勉強してくれ
ごく端的に説明すると消えるというか、スコープを抜けるとアクセス不可になって取り出す手段がなくなる
def の「中」のローカル変数は def の「外」からはアクセスできない
だからメソッドの引数で「中」に入れてメソッドの返り値で「外」に出す
869:デフォルトの名無しさん
10/01/23 21:57:27
File.statでサイズ読めないかね
870:デフォルトの名無しさん
10/01/23 22:02:55
俺もそうおもた
871:863
10/01/23 22:03:17
>>869
やってみたのですが size = 0 になっています。
statコマンドで調べても0バイトになっています。
そもそも、ブロックスペシャルファイルのバイト列の長さって、デバイス依存な気がします。
つまり「ファイルサイズ=バイト列の長さ」は成り立たない、ということかも知れません。
872:デフォルトの名無しさん
10/01/23 22:03:31
$ sudo ruby -e "p File.stat('/dev/sda')"
#<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>
873:863
10/01/23 22:06:31
>>872
ふむ、、やっぱり size = 0 ですね。。
バイト列の長さがデバイス依存(つまり不定値)なのは、よく考えてみればわかります。
/dev/null は常に長さ0ですし、/dev/zero は無限大。
難しいです。。
874:デフォルトの名無しさん
10/01/23 22:11:19
そもそもなににつかうん
875:デフォルトの名無しさん
10/01/23 22:12:16
やっぱりUNIXスレで聞いたほうがいいと思うんだ
カーネルとファイルシステムの知識が必要だし
Ruby初心者スレで聞くような話題じゃないよ
876:865
10/01/23 22:18:31
>>868
ありがとうございます。
ただ、自分が不思議に思ったのは、外から関数内の変数にアクセスできないことではなく、
関数の外の変数に内側からアクセスできてないことです。
一般的に内側から外側の変数にはアクセスできると思うので。
x=20の段階で、外側の変数に代入するのではなく、新しい変数を作ってしまっているのが不思議なんです。
877:デフォルトの名無しさん
10/01/23 22:18:59
>>876
変数のスコープという概念を勉強してくれ
878:863
10/01/23 22:19:06
>>874
LVM の論理ボリュームのスナップショットを自動で作成しようかと。
ただし、論理ボリュームの大きさが:
・Xバイト以下だったら、それと同じ大きさのスナップショットを作成
・Xバイトより大きければ、Xバイトのスナップショットを作成
という処理をしたかったのですが、論理ボリュームの大きさを調べるために
外部のコマンドに投げるのは嫌だったので、どうせならデバイスファイルの中身の大きさを調べちゃえ、みたいな感じです。
>>875
すみません、そうします。
カーネルの知識はありませんが。。
879:デフォルトの名無しさん
10/01/23 22:22:19
はいさよなら
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5394日前に更新/233 KB
担当:undef