Ruby 初心者スレッド Part 33at TECH
Ruby 初心者スレッド Part 33 - 暇つぶし2ch859:デフォルトの名無しさん
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