[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/16 20:58 / Filesize : 261 KB / Number-of Response : 970
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 19



1 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:26:33 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.6 の使用を強くお勧めします】

関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/
 ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


75 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:15:53 ]
で、

# 0001という文字列を数字にして178を足して0詰め数字3文字に
after_basename = sprintf("%03d", basename.to_i + 178)

のとこだけど、178を足してる時点で数字3文字になることはほぼ確定なんで、イマイチよくわからん
もし、0900.gif が 1078.gif にリネームされてもOKなのなら、単に

after_basename = (basename.to_i + 178).to_s

とでもしてくれ
>>74のままでも4桁動くから使用上は問題ないけどな
あと、フルパスや相対パスを引数にしてもそのディレクトリでリネームされるのでよろしく

76 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:23:52 ]
ありがとう><
0001.gifから0200.gifまでとかだと
どうするとよいですか!?

0詰めは、100以下のときだけですね^^;

77 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:30:19 ]
適切なファイル名を200個作って引数を200個渡す
以上

どこにどんなファイルがあるか知らんのでこれ以上はどうにもならん
汎用的な条件つけて頼めばもう一回くらいは誰か作ってくれるかも
引数として指定されたディレクトリのファイルを全てリネームするとか

78 名前:デフォルトの名無しさん [2008/04/16(水) 20:46:32 ]
シェル呼び出しの時間を計るにはどうしたらいいですか?
Benchmark.measure { `sleep 10` }
これだと何故か実行時間が0になってしまうのです

79 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:55:08 ]
その間自プロセスはwaitしてるだけだから時間が掛かってないってことだよね。

tms = Benchmark.measure { `sleep 10` }
tms.real #=> 10.0072751045227

あと、``は結果を文字列で得たいときに使うものだから、system 'sleep 10'
のほうが行儀がよいと思う。


80 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:59:04 ]
ていうか
irb> Benchmark.measure { `sleep 10` }
#<Benchmark::Tms:0x401fae88 @utime=0.0, @cstime=0.0, @total=0.01, @cutime=0.01, @label="", @stime=0.0, @real=10.0146338939667>
これは妥当だと思うんだけど
というか user time や system time の違いってわかってもらえてるのかな

81 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:15:13 ]
「たぶんtotalだけみとけばいいんだな」くらいの理解だと思われる。


82 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:33:13 ]
>>76
ruby 連番 rename あたりでググると吉。


83 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:45:11 ]
>>50
初めて見たんだがそれ有名なのか?



84 名前:デフォルトの名無しさん [2008/04/17(木) 05:28:30 ]
Rubyってタイプヒンティングやインターフェイスがないですが
引数にある型のオブジェクトが欲しい場合、
どうするのが普通ですか?

85 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:11:30 ]
>>84
お好きなのをどうぞ
* ダックタイピングを実践する
* 自分で引数を解析し例外送出などの処理を記述する
* Sapphireがリリースされるのを待つ
* いつかrubyに実装されるのを待つ
* PHPを使い続ける

86 名前:デフォルトの名無しさん [2008/04/17(木) 07:26:32 ]
プログラミングRubyのダックタイピングの項を読み直してみました
ダックタイピングというのは
引数リストでフィルタせず、メソッドがあるものと前提して呼び出し、
ないときには発生する例外によってコーディングの間違いを知る
といったスタイルですね
基本ダックタイピングで、
厳格にしたいケースではメソッドの有無をたしかめる
といったあたりが現実的なところでしょうか・・

87 名前:デフォルトの名無しさん [2008/04/17(木) 07:46:22 ]
テンプレートメソッドを
継承でするか、mixinでするかの判断基準は
何でしょうか?

88 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:24:10 ]
>>83
試してみるといい
まあ、Mechanizeしたいと考えるようなページなんて大体決まってるってことなんだろうな
引っかからない人は全く引っかからないバグだ、これ

89 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:32:00 ]
>>87


いやマジで
どっちも「使ったから便利明快になる」というものではない
(サンプルコードでは明快だけどな)
継承を試してわけわかめだったらmix-in用に思考を切り替えるのが一般的かもしれん

90 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:42:07 ]
>>87
テンプレートメソッドパターンとかはまず置いといて、継承が妥当か否かだったら
こんなんがあるな。
jp.rubyist.net/magazine/?0015-CodeReview#l11

Mixinとか委譲のおかげでRubyでは比較的あんまり継承しない気がするのは俺だけ?

91 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:00:55 ]
どんだけ注意深く作る(作らなければならない)かの話だな
private を書くかどうかに似た話

92 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:31:03 ]
privateとか何のためにあんの?
使わないメソッドなんて使わないんじゃね?

93 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:39:49 ]
>>92
うん、まあ、君の感覚はある意味正しい
ある一定規模未満の素朴なプログラムでは単にめんどくさいだけとも言える
「グローバル変数が危険とか言うけど変数の場所とか名前とか被らないようにしておけば問題なくね?」
という問題と根っこは一緒だ



94 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 17:15:17 ]
>>77
*.gifとかならできそうですかね。ありがとうございました!

95 名前:デフォルトの名無しさん [2008/04/17(木) 17:18:11 ]
引数を()で囲まない
Class.method arg
という書き方をした時に、
「この書き方は今後のRubyではサポートしない可能性がある」というような
警告が出る時と出ない時がありますが
これはどういう時に出るのですか?

96 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 17:29:31 ]
>>95
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/17868
> 具体的には
> 引数として与えるメソッド呼び出しの括弧を省略しない
> ということです。文法的に値と文の区別をはっきりさせようという
> 思いです。

っていうか関数型メソッド以外ではカッコ省略する必要ないじゃんという気はする
あとRiteって今で言うところのRuby2.0のことね

97 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:25:10 ]
>>96
ありがとうございます
マッツの設計思想はわかりますが
引数が一つの時は()書きたくないですね
この警告抑制したりできるのでしょうか

98 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:27:43 ]
ruby -W1 hoge.rb
もしかしたら W0 でないとダメかもしれん

99 名前:デフォルトの名無しさん [2008/04/17(木) 18:54:52 ]
eachのブロックの中からループのカウント数を知る方法があれば教えて下さい。

100 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:57:08 ]
つ each_with_index

101 名前:デフォルトの名無しさん [2008/04/17(木) 19:05:36 ]
数値をゼロパディングする方法は

printf("%010",NUM)
以外にないですか?


102 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 19:12:44 ]
number.to_s.rjust(width, "0")

103 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 19:19:02 ]
>>100
こんな便利なものが
ありがとうございました



104 名前:デフォルトの名無しさん [2008/04/17(木) 20:24:07 ]
文法的なエラー、
たとえばendが足りなかったりすると
ファイルの最後の行を指示してエラーが出たりします。
変更箇所が多かった場合、どこで間違えたか分かりにくいです。
どこで間違えているかすぐにわかる方法があれば教えて下さい。

105 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 20:51:58 ]
ruby/sdlをつかってプログラムを作ろうと思っているのですが
常に最前面に表示し続けることは可能でしょうか?

106 名前:デフォルトの名無しさん [2008/04/17(木) 21:02:48 ]
>>102
ありがとう神様

107 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:10:49 ]
>>104
ブロックの開始と終了の知識を確実にした上で、
ブロックをインデントしてくれるエディタを使う
インデントが大きくなるべきでないところで大きくなってるところがあれば
そこが閉じ忘れ
同様に "" や '' や () の対応を表示してくれる(色分けしてくれる)エディタを使うと
多くの場合「閉じ忘れ」がすぐ見つかるというか閉じ忘れることがない

あと ruby -c ./hoge.rb とすると文法チェックだけをしてくれる
自信ないなら中規模な変更ごとにチェックしてもらうといい

108 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:24:31 ]
>>105
たぶん不可能

ちなみにRuby/SDLの話なら、ゲーム制作スレの方がいい
pc11.2ch.net/test/read.cgi/gamedev/1207069887/

109 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:12:21 ]
>>107
エディタのインデントは完全ではないから、ちょっと複雑になるとあてにならないよ。
Rubyの文法は複雑だから、エディタごときが完全にパースできるわけではない。
だからエディタに任せてもendの閉じ忘れは検出できないことがよくある

110 名前:デフォルトの名無しさん [2008/04/17(木) 22:15:27 ]
>>104
・classやmoduleの閉じ忘れ
最初に書け。
・defとかその中のifとかの閉じ忘れ
メソッドでけぇ。

対処法にあんまなってないけど考え方としてはこんな感じかなぁ。

111 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:16:11 ]
>>109
出たな100パーセント厨
口癖は「それは完全ではない」
90パーセントの達成度の価値を認めない人間だ

112 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:27:51 ]
90パーセントかどうかはともかく、8割くらいはエディタの自動インデントで見つかるよな

エディタとして何を使ってるかとRuby編集モードの出来に依存するのが難点か
Emacsのruby-modeはわりと優秀

113 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:31:12 ]
>>104
www.logic-junction.com/products/rubyend.html

patch をあてなきゃだからちょっと敷居は高いけど。



114 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:10:16 ]
>>113
これよくないですか?
なんで本体に取り込まれないんだろう

115 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:59:32 ]
parse.yをいじるからじゃないの。
Ruby2.0あたりではyacc捨てたいねえとか言う話もあったんじゃなかったっけ。

116 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 02:09:29 ]
>>113
どうでもいいが、ページの上にある「Abount」に吹いた。

117 名前:デフォルトの名無しさん [2008/04/18(金) 02:43:58 ]
プログラミングRubyに
ブロックの記述は、一行の場合は{}
二行以上の場合はdo〜endを使うのが
Rubyコミュニティーのコンセンサスだと書いてありましたが
ブロックは複数行になる場合も{}の方が視認性よくないですか?
すべてendだと、何を閉じるものなのか、頭を見ないと分かりませんが、
{}だと、閉じカッコを見るだけで
何を閉じているのかがだいたい推測つきますし。
endにする合理的理由ってあるのでしょうか?

118 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 02:56:59 ]
主観的な問題

119 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 03:06:49 ]
・whileやifとの統一性
・だいたいソースは上から読む>何を閉じるものなのか、頭を見ないと分かりません
・Hashリテラルだって}で閉じるし、%{...}文字列リテラルなんかもある

でも結局は>>118か。

120 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 04:50:55 ]
end地獄が大嫌いだからdo〜endなんか絶対に使わない

121 名前:デフォルトの名無しさん [2008/04/18(金) 06:09:35 ]
ってか、
そもそもなんでendなの?
文と紛らわしいしタイプも面倒くさい。
Rubyの最大の欠点がend。

122 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 06:48:00 ]
}地獄が大嫌いだから(複数行で){}なんか絶対に使わない

>>121
主観的な問題

123 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 06:56:24 ]
主観で片付けるのはおかしいよ
文と紛らわしいのも、タイプ数が多いのも
定量的な問題じゃん
理性的な判断を下せる範疇にあるはずだよ



124 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:49:21 ]
     end
    end
   end
  end
 end
end

125 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 07:52:02 ]
主観的な問題でないのなら
なぜ「do〜end超読みやすい! すっきりする」って人と
「do〜end読みにくい上に紛らわしすぎ」って人とに分かれるんだ

126 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:04:48 ]
だって引数の記述と通常の文との違いを明確にしたいmatzだよ
その認識の延長線上には、文と紛らわしいendの否定があるはずなんだよ
endをすぐに完全に廃止しろとは言わない
試しに{}も許容するようにしたらいいんだよ
コストはそんなに高くないだろう
その小さな変化は
きっと世界中の開発者に歓迎されると思うよ。

127 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:07:12 ]
・yaccの能力で、beginとcaseの文法が上手く纏められなかった
・endを使うとruby-mode.elが書けそうだった
こんな理由じゃなかったっけ。

ifやwhileのこと?
>試しに{}も許容するようにしたらいいんだよ

128 名前:デフォルトの名無しさん [2008/04/18(金) 09:04:24 ]
endでいいと思うけど、emacsとかで
対応するclass,def,if,forにジャンプする
機能って無いですよね?

129 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:16:27 ]
>>128
あるなら俺も使いたい。
{} の方ならこれでジャンプできるけどな。

ttp://www.bookshelf.jp/soft/meadow_42.html#SEC635
;; By an unknown contributor
(defun match-paren (arg)
"Go to the matching paren if on a paren; otherwise insert %."
(interactive "p")
(cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
((looking-at "\\s\)") (forward-char 1) (backward-list 1))
(t (self-insert-command (or arg 1)))))

(global-set-key "%" 'go-to-paren)

130 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:43:04 ]
M-x ruby-beginning-of-block

131 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:44:51 ]
あ、>>130は「このブロックの最初」にカーソルを移動な
カーソル移動がめどいという場合には妥当な機能

132 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:55:22 ]
ああ、キー操作あった
C-M-p
ちなみに {} のブロックでも有効
ただ、厳密には「インデントつける」計算上のブロックの最初に移動する
だから、

File.open('hoge.txt'){|f|
f.puts data
}

の場合は { ではなく File の F に移動する

File.open('hoge.txt'){|f| f.puts data }

の場合は検知できなくて、「ひとつ上」のブロックの最初に移動する

133 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:06:13 ]
end は予約語だから、Rubyスクリプトを読んでるという頭の中では何かと間違えることはないなあ
(むしろ bashスクリプトで doneではなく endと書いて動作不良に首を傾げる)
慣れと主観っちゃそのとおりだがそれはそれで台無しな意見だ(w
素直に着色なエディタを使うというのはどうだろう



134 名前:デフォルトの名無しさん [2008/04/18(金) 17:11:08 ]
モジュールの中で、
自分を読み込むクラスに実装を期待するメソッドを定義あるいは明示するには
どうしたらいいですか?

135 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:19:34 ]
まにゅあるに「hogeとhageはつくってね」とかく

136 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:28:37 ]
え・・
Javaでいうabstractみたいな方法はないのでしょうか

137 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:46:52 ]
def hoge
 raise "override me!"
end

138 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:46:54 ]
実行中にメソッドを追加したり削除したりできるRubyではそもそも無理
別途ユニットテストとかでソースコード自体を検査させるべき

139 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 17:47:05 ]
こういうのとか?
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/15841

140 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:39:10 ]
The Ruby Way 第2版
ttp://www.amazon.co.jp/dp/4798115339/
おおむね今週に発売(たぶんたいていの本屋に並んでるはず)
ボリュームアップし過ぎて5千円札では足りなくなりました

141 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:09:25 ]
結局実行時だけど、自分はこうしてる
 def foo
  bar
 end

private
 def bar
  raise NotImplementedError
 end

142 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:14:58 ]
モルボル教だかのお布施額がアップしたんだろ

143 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:20:36 ]
def SomeModule.included(klass)
 raise unless klass.method_defined?(:foo)
end
とかやればいいんじゃね?



144 名前:デフォルトの名無しさん [2008/04/18(金) 19:20:54 ]
19種類のRubyテンプレートエンジンレビュー
Mini reviews of 19 Ruby template engines
www.hokstad.com/mini-reviews-of-19-ruby-template-engines.html

19種類ってありすぎww

145 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:23:31 ]
実行時にエラーが出るというのは致命的
実際にそのメソッドが使われないと、未定義かどうかのエラーが出ないんだからね

それこそ、めったに起きないエラー処理のメソッドだった場合は、
まともに動作して安心してた頃になって致命的なことになる

ソフトウェアテストでチェックすることをお勧めするよ

146 名前:105 mailto:sage [2008/04/18(金) 19:26:28 ]
>>108
ありです

147 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:28:13 ]
>>140
翻訳が変わってるのがすごく気になるな・・

148 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:39:37 ]
rubyはスペルミスがあってもそのまま動きますから、小さいことは気にしませんw

149 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:48:44 ]
>>147
同じく
クイープの翻訳は最近アテにならないからなあ

150 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:00:08 ]
Ruby初心者ですアドバイスよろしくお願いします。
.txtファイルに書かれた半角スペースで区切られた単語郡を
それぞれ配列に格納するスマートな方法があればお教えいただけないでしょうか。
汎用性を持たすために、ファイルの読み込みは
ruby test.rb < gomi.txt
にしたいです。
windowsXP ruby1.8.6

151 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:07:20 ]
つsplit

152 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:10:48 ]
a bb ccc
dddd eeeee ffffff ggggggg

というようなテキストだと仮定
「それぞれ」という言葉から、1行目の配列と2行目の配列は別だと推測
ruby test.rb < hoge.txt
でも
ruby test.rb hoge.txt
でも動作する

# 配列を格納する配列
all_arr = Array.new
# readlines は 引数のファイル、無ければ標準入力から読み込んで各行を配列にして返す
readlines.each do |line|
# chomp で line を区切って配列にする
# 区切る"文字"は 正規表現の / / にマッチするものつまり半角スペース1個
arr = line.chomp.split(/ /)
# push メソッドで arr を all_arr の要素の末尾に追加する
# all_arr を「長くする」のではないことに注意
all_arr.push(arr)
end
# all_arr の中身を表示
p all_arr

153 名前:150 mailto:sage [2008/04/19(土) 01:40:27 ]
150です。早々の回答を有難うございました>151,152
二次元配列のような形にしたかったので、152さんのおっしゃるとおりです。
配列の値をActiveRecordでsqlに挿入しようと思っていました。
本当に助かりました、有難うございました。



154 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 05:12:28 ]
スキルレベルの微妙なちぐはぐさ加減が怖い

155 名前:デフォルトの名無しさん [2008/04/19(土) 06:21:48 ]
emacsをruby-modeで使っています
この環境で定義済みクラスやメソッドのリストを見たり、
定義済みのメソッドを自動補完させたりすることは出来ますか?

156 名前:デフォルトの名無しさん [2008/04/19(土) 18:18:04 ]
mixinとコンポジットの使いわけがよく分かりません
mixinがないほとんどの言語では、mixin的なことはコンポジットで実現しますよね
どういう時にmixinを使うんですか?

157 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 18:22:53 ]
mixin は mixin 先の実装に依存した実装を追加したい時に使う。

158 名前:デフォルトの名無しさん [2008/04/19(土) 19:44:38 ]
ファイルパスから親ディレクトリを取得するにはどうしたらいいですか?

159 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 19:47:52 ]
>>158
File.dirname(file_name)


160 名前:158 mailto:sage [2008/04/19(土) 20:01:35 ]
DirとかFileUtilsばかり見てました
ありがとうございます


161 名前:デフォルトの名無しさん [2008/04/19(土) 20:05:51 ]
ライブラリのクラスメソッドを使う場合に
それを後に書く方法があれば教えてください
たとえば
File.dirname 'hogehoge'

'hogehoge'.(File.dirname)
みたいな形で書きたいんです

162 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:10:40 ]
>>161
そうですか

163 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:15:50 ]
どっかでそんな後置の言語を見た気がする
仮にRubyで実現するとしても、それを繋ぐのは . ではないだろうな



164 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:22:51 ]
気持ち悪いと思わないなら
class String
def dirname
File.dirname(self)
end
end

あとはpathnameというライブラリもある。


165 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:38:34 ]
というか何のためにそうしたいのかによるな

166 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 21:08:19 ]
class Object
 def callback(method, mypos=0, *args)
  args.insert mypos, self
  method.call *args
 end
end

p Math.sqrt(400)
#=> 20.0
p 400.callback Math.method(:sqrt)
#=> 20.0

p [1,2,3,4,5,6][2,3]
#=> [3, 4, 5]
p 3.callback([1,2,3,4,5,6].method(:[]), 1, 2)
#=> [3, 4, 5]

こんなもんでどうかな

167 名前:166 mailto:sage [2008/04/19(土) 21:09:58 ]
上のは >>161


168 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 21:46:47 ]
>>165
クラスとオブジェクトとメソッドの理解がまだ足りないんだと思う
気持ちはわかるが考え方が不当

欲しいのはいわば pathenize_dirname メソッドと推測

p '/usr/local/bin/ruby'.pathenize_dirname
"/usr/local/bin/"

メソッドの引数形式を「カッコ悪い」と感じる時期に罹るハシカみたいな病気だ

169 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:30:45 ]
え、>>161は見た目が気に入らないというだけ?
機能的な話かと思ったら、どうやら明後日を向いていたようだ。
そういうことであれば >>166>>161の美意識には適うまい。

170 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:33:10 ]
こんなのもありか。

class String
def to_path
Pathname(self)
end
end

p '/usr/local/bin/ruby'.to_path.dirname


171 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:33:40 ]
いや、pではto_strは呼ばれないな。putsで。


172 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 15:48:07 ]
ERBについて教えてください。
railsのテンプレートでERBが使われてますが、
これは何かのタイミングで一度rubyのクラスに変換されてからHTMLに再び変換されるのでしょうか?
例えばJavaのJSPがJSP→サーブレット→HTMLと変換されるのと同じ流れですか?

173 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:05:58 ]
>>172
<%%>の中身がそのままRubyコードとして抜き出され、
それ以外は_erbout.print ... という形に変換されてから
Rubyで評価される感じです。




174 名前:172 mailto:sage [2008/04/20(日) 16:30:00 ]
>>173
なるほど、jspみたいにrhtmlファイルがクラスに対応するわけではないんですね。
あまり綺麗な仕組みではないですね…。
ありがとうございました。

175 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:31:52 ]
単純に、ERBの簡単な使い方勉強するとイメージしやすいと思うよ
eRubyの仕様じゃなくて、ライブラリの使い方ね






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<261KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef