Ruby 初心者スレッド ..
[2ch|▼Menu]
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

5403日前に更新/233 KB
担当:undef