[表示 : 全て 最新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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


2 名前:デフォルトの名無しさん [2008/04/14(月) 00:26:55 ]
プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

3 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:27:09 ]
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか?

A:
プログラム作成の初心者だったら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
www.amazon.co.jp/dp/4797336617/
他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
www.amazon.co.jp/dp/4274066428/


4 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:29:25 ]
■前スレ
Ruby 初心者スレッド Part 18
pc11.2ch.net/test/read.cgi/tech/1203658291/

■関連スレ
Rubyについて Part 31
pc11.2ch.net/test/read.cgi/tech/1204466626/

Rubyの宿題教えてください。
pc11.2ch.net/test/read.cgi/tech/1106572657/
pc11.2ch.net/test/read.cgi/tech/1200175247/

【ActiveScript】RubyをWindowsで使うスレ【GUI】
pc11.2ch.net/test/read.cgi/tech/1155031689/

Ruby on Rails
pc11.2ch.net/test/read.cgi/tech/1191381506/

Rubyについて(アンチ専用) Part003
pc11.2ch.net/test/read.cgi/tech/1207233348/

5 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:30:31 ]
■公式/非公式関連リンク
Ruby Home Page
www.ruby-lang.org/ja/

Rubyリファレンス(よくサーバーエラーになります)
www.ruby-lang.org/ja/man/
www.ruby-doc.org/ (英語)

リファレンスのHTMLヘルプ版配布
elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利

Ruby FAQ
ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ

Programming Ruby - The Pragmatic Programmer's Guide
www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語

逆引きRuby
www.namaraii.com/rubytips/

6 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:31:02 ]
RAA - Ruby Application Archive
raa.ruby-lang.org/

RubyForge
www.rubyforge.org/
# Rubyのアプリやライブラリが検索できる

日本Rubyの会 公式Wiki
jp.rubyist.net/
# メニューに表示されていない埋もれた情報ページ多数

Rubyist Magazine - るびま
jp.rubyist.net/magazine/
# コードレビューが好評

Ruby hotlinks 五月雨版(日記やblogのアンテナ)
www.rubyist.net/~kazu/samidare/

Rubyの本一覧
www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2

<rubyXML/>
www.rubyxml.com/

Matzにっき(Ruby作者の日記)
www.rubyist.net/~matz/

7 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:39:18 ]
乙乙

8 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:41:13 ]
Otz

9 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:42:26 ]
■最近できたWiki
Ruby 初心者スレッド Hiki
starlet.s145.xrea.com/ruby/hiki/

Ruby Portal
ruby.morphball.net/portal/

10 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:44:07 ]
これでテンプレ全部。
>>1>>2が恐ろしいほど瓜二つなのはるびま添削本の呪い。



11 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 11:47:16 ]
文字列リテラルの説明で

> 空白を間に挟んだ文字列リテラルは、コンパイル時に1つの文字列リテラルと見倣されます。

とあったので C の文字列の要領で

print("foo"
"bar")

とやったら syntax error になってしまいました。

この場合の「空白」には改行などは含まれていないということだと思いますが、
これって何でなんでしょうか?
改行も仲間に入れてあげても別にバチは当たらないと思うのですが。

12 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 11:59:18 ]
>>11
それは実装に対する苦言?それとも、どうやったらいいか聞いてる?

前者なら、Rubyの本スレで言ってほしい。

後者なら、

print("foo" +
"bar")

でOK

13 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 12:01:39 ]
というか、そもそもの問題としてそれに頼ったコードは書かないで欲しい
明示的に連結しとけ

14 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 12:21:11 ]
改行があるなら \ でエスケープするのが常道

print 'foo' \
'bar' \
'baz'

print 限定で出力フィールドセパレータの $, 依存だが
コンマで区切っても単純に連結されたような見掛けで出力される

print 'foo',
'bar',
'baz'


15 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 12:51:58 ]
>>11
えー、それだと逆にめんどくさいじゃん

def gethoge
@str = 'foo'
'hoge'
end

って書いたら @str も gethoge の返り値も foohoge になるぞ

16 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 16:07:57 ]
>>12 >>14
質問が悪くてすみません、 folding して書きたいというのではなくて、
「前者」で経緯というか理由が知りたかったです。
ので改めて本スレで聞いてみます。

>>13
頼ると何かまずいですかね?

>>15
私の print の例の方は、括弧で括ってるのでちょっと違うような気がします。
と思って試してみたら、

def gethoge
@str = ('foo'
'hoge')
end

これだと gethoge の返り値は "hoge" になるんですね。
うーむ。

17 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 16:57:13 ]
いや、() の有無なんて関係ない
要望は「改行を挟んだ2つの文字リテラルは連結されて解釈されて欲しい」ということだろ
そもそもの前提だって
「空白を挟んだ(あるいは挟まない)2つの文字リテラルは連結されて解釈される」
ということだ

irb> 'a' 'b'
"ab"
irb> 'a''b'
"ab"
irb> eval("'a'\t'b'")
"ab"

あと、その gethoge の () は2つの式がグルーピングされてるだけだ
機械的に最後の式の 'hoge' が評価されてるだけに過ぎない

def gethoge
@str = ('foo'; 'hoge')
end

と全く同じこと

18 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:01:31 ]
改行で式が繋がるのは上の方に書いてある通りで、リテラルはその対象じゃないと
括弧の有無だけでは、中の式までは面倒みませんってことかな

19 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:07:37 ]
いや、コンパイル時にどう扱われるかだけの問題だから…
'a' 'b' 'c'
と書いてあったなら、それは 'abc' と書いてあるものとみなされて String オブジェクトになる

20 名前:11 mailto:sage [2008/04/14(月) 17:29:05 ]
うーん、どうも私がリファレンスマニュアルを読み違えてるだけな気がしてきました。
「字句構造」のところには

> 空白文字とはスペース、タブ、垂直タブ、バックスペース、キャリッジリターン、
> ラインフィード、改ページです。

とありますが、以降の記述では、
「空白」「空白文字」が文脈によって改行を含んだり含まなかったりするんですね。
読解力が無くてすみません。



21 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:38:20 ]
そのあとに改行についての記述があるだろ
Rubyにおける空白文字は改行を「含まない」
空白文字の中でホワイトスペースの代わりに使うと動作が変わるものが入ってなくもない気はするが(LFは怪しい)
とりあえず、基本的に「改行は空白文字ではない」

22 名前:11 mailto:sage [2008/04/14(月) 17:57:39 ]
なるほど。

どうやら私の誤解はその改行についての記述の中の
「行が明らかに次の行に継続する時」の認識間違いから来ているようです。

print('hoge'
'fuga')

は、私には「行が明らかに次の行に継続」しているように見えていたのですが、
>>17 で指摘いただいたように、括弧には行を継続するような機能は無かったと。
わかりました。

23 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:05:30 ]
行末にあるものが、文末になりえない演算子とかなら、って意味ですねそれはだいたい

24 名前:11 mailto:sage [2008/04/14(月) 18:08:54 ]
ああなるほど、 >>12, >>14 の例なんかはまさにそうですね。

25 名前:デフォルトの名無しさん [2008/04/14(月) 21:54:40 ]
クラスの中で必要とする他パッケージはどこでrequireするのがいいですか?
使う直前、コンストラクタ内、クラス定義の外など
考えられるかと思いますが

26 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:13:36 ]
基本は「最初のファイル」の先頭だと思われる

#!/usr/bin/ruby -Ku
require 'open-uri'
require 'kconv'
require 'myapplib/config.rb'
require 'myapplib/myapp.rb'
require 'myapplib/parser.rb'
require 'myapplib/rss.rb'

MyApp.new.run

こんな感じ
「require するだけで大量のファイルが読み込まれて処理が一瞬止まる」とか
「エラーが起きたときのような時しか使わないライブラリ」
のような場合は、メソッドの中で require することはある
その場合もソースファイルの先頭のどこかにコメントとして書いておくと親切

27 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:21:18 ]
なるほど
必要なパッケージを明示するということですね
ありがとうございました

28 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:25:53 ]
autoloadっつー便利なものもあるぜ

29 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:30:11 ]
autoload は概念は便利だが実際には注意深く使わないといけないので微妙に面倒

30 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:35:24 ]
指定されたファイルに存在する全てのファイルのクラスとモジュールを精査して
自動で全てを autoload する auto_require というのを作ってみるというのはどうだろう



31 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:38:16 ]
>>30
requireするファイル名とクラス名に一定のルールを課すならできなくもない。
ActiveSupportにあるね。


32 名前:デフォルトの名無しさん [2008/04/14(月) 22:47:17 ]
Rubyには名前付き引数はないみたいですが
どう実現するのがスマートでしょうか?

33 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:49:05 ]
def moge(x, y, options={})
...
end
のように最後に省略可能なハッシュを引数にとるようにし、
呼び出すときは
moge(100, 200, :foo => 0, :bar => 1)
のようにシンボルを使う。
1.9だとこれを
foo(100, 200, foo: 0, bar: 1)
とも書ける。
fooの定義ではoptions[:foo]などとして参照する。


34 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:50:11 ]
fooじゃないmogeの定義


35 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:09:00 ]
>>33
ありがとうございます
わりと自然な形で書けるんですね

36 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:22:49 ]
言うほど自然でもないようにも思う

まあ、RoR以外のRubyではそれほど一般的ではない
あまり使わず紛らわしいオプションをユーザーに記述させたいときとかだな

37 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:48:00 ]
なんか馬鹿ばっかだな
ソース読んでる?MLとか見てる?

38 名前:デフォルトの名無しさん [2008/04/15(火) 00:03:32 ]
オブジェクトの中から、自分のクラス名を取得するにはどうしたらいいですか?

39 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:16:34 ]
>>38
obj.class

40 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:17:06 ]
self.class.to_s





41 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:20:32 ]
self.class.name

42 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:30:58 ]
>>36
RoR系統儀とgems系統を引いたら現状のRubyはほとんど残らんと思う
どっちかに依存してると思うぞ
添付ライブラリだけの「ぴゅあ」なRubyでスクリプト作ってる人はそう多くないはず

43 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:42:13 ]
>>42
んなわきゃない

44 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:48:36 ]
「blank?が公式に載ってないのでおかしいと思ったらこれActiveSupportなのね」
という内容のブログの投稿が普通にある時代だからなあ

45 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 09:32:30 ]
>>32
どちらかといえば、名前付き引数を使わないのが一番スマート
引数が複雑になりそうならこういうやり方もある

Foo.new(x, y) do |foo|
 foo.target = './dest/'
 foo.index = 10
end

この方法の利点は
Fooに存在しない名前のパラメータを設定しようとしたとき、即座にエラーを出してくれること

>>36
ハッシュで名前付き引数を渡すのは、RoR以前から広まってたぞ

46 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 11:49:20 ]
RoRな人たちに多用というか乱用されてる感はなくもないな

47 名前:11 mailto:sage [2008/04/15(火) 13:29:46 ]
なんかタイムリーな話題が ruby-dev に出ちゃっているようなのですが、
件の改行の制限は、設計方針的なものというよりも、
yacc (というか LALR(1) ?) の制限によるものなんでしょうかね。

これで私が当初からもやもやしていた疑問が大体解けた気がします。

48 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:35:12 ]
「それだと正確にパースするのめんどいから」というのに類する問題っぽいのは
かなり自明だと思ってたんだがそうでもないんか

49 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:49:18 ]
質問。MechanizeでWikipediaからページを取ってくるとハングアップしませんか?
agent.get('ja.wikipedia.org/wiki/%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D')

50 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:58:39 ]
>>49
それFAQ。ていうか「Mechanize Wikipedia」で検索くらいしろ。
あと、ハングアップではなくサーバへのアクセスの無限ループなので試すな。迷惑だから。
引数をURIオブジェクトにすると一応動作するが、それだけではURLエンコードされたリンクはたどれない。

RubyのMechanizeではパーセントつきURL文字列を処理できない
ttp://d.hatena.ne.jp/kitamomonga/20080410/ruby_mechanize_percent_url_bug

ここではto_absolute_uriを動的に書き換えろって言ってるな。



51 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 14:16:01 ]
>>50
要はバグなんですね
agent.get(URI.parse('ja.wikipedia.org/wiki/%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D'))
なら動作しました

52 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 17:13:37 ]
拡張モジュールをデバッグするために、-g をつけてコンパイル
したんですけど、Ruby 本体も -g をつけてコンパイルしなきゃ
いけませんか。
初心者でごめん。

53 名前:11 mailto:sage [2008/04/15(火) 17:51:13 ]
>>48
一連のレスの中でそう指摘してくださったのは >>48 さんが初めてだと思いますので、
自明というわけでもないのではないでしょうか?

54 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 18:08:51 ]
当たり前のことは誰も説明しない、というそれだけの話かもしれない。

55 名前:11 mailto:sage [2008/04/15(火) 18:20:04 ]
うーん、当り前の話でしたか・・・

まああまりこれ以上引っ張るネタでもなさそうですし、
私も今は、世界のナベアツ Golf の方に興味が行っていますので、このへんで。

56 名前:デフォルトの名無しさん [2008/04/15(火) 19:27:40 ]
指定したハッシュのキーがあればその値、
なければ指定した値を取り出すための
もっとも短い書き方を教えてください
今は
hoge = moge.has_key?(key_name) ? moge[key_name]:default_value
と書いていますがmogeとkey_nameが重複していて気になります

57 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:31:57 ]
hoge = moge[key_name]||default_value

とか?値が nil にも対応しないといけないんだとダメだけど。

58 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:34:05 ]
hoge = moge.fetch(key_name, default_value )

59 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 19:36:21 ]
h = Hash.new(default_value)
じゃだめかな

60 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 20:05:37 ]
>>57-59
ありがとうございました
fetchがそのためのものですね



61 名前:デフォルトの名無しさん [2008/04/15(火) 22:09:41 ]
Rubyの流儀ではファイルとクラスの関係はどうですか?
他言語では一ファイル一クラスが多いようですが

62 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:34:36 ]
>>52
拡張ライブラリだけ-gついてりゃ大丈夫
デバッグ情報付きのrubyがあればあったでいいとは思うけど

63 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:44:52 ]
>>61
てきとう

RoRの流儀は知らない

64 名前:デフォルトの名無しさん [2008/04/15(火) 23:40:04 ]
コンストラクタでsyslogを開いてログを取ってるのですが
デストラクタがないためcloseする場所がないです。
どうするのがペターでしょうか?

65 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:48:20 ]
明示的にcloseを外にさらけ出すとか、
ブロック構文にしてyieldからもどってきたらcloseするとか、
define_finalizerしといて適切にGC.Collectしてねと言い捨てるか。

66 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:48:28 ]
>>62
さんくす

67 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:36:00 ]
>>65
ありがとうございます
define_finalizerってやつ使うか…と思っていたのですが
syslogは複数ハンドルオープンできないんですね
コンストラクタで開いて開きっぱなしにする方法がそもそもマズいのでは
と思い直し
書く時だけオープンしてすぐ閉じるようにしました

68 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 01:16:29 ]
www.kuwata-lab.com/rubyflow-ja/

69 名前:デフォルトの名無しさん [2008/04/16(水) 03:16:58 ]
正規表現を使ったディレクトリの再帰コピーってどうしたらいいですか?
Dir.globはワイルドカードしか使えないので困ってます

70 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 04:04:40 ]
再帰関数作ればいい。



71 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:02:43 ]
Dir.glob("**/*")の戻り配列をgrepして処理すれば。
あ、再帰じゃねーや(w

72 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:56:03 ]
>>69
1. FileUtils.cp_r を参考にする
2. Find.find {|path| do_somthing_with(path)}
3. Dir.open {|dir| dir.each {|entry| do_somthig_with(entry)}}

……こんなもん?

73 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 14:45:54 ]
0001.gif 0002.gif

179.gif 180.gif
に変換したいのですが。。
ぐぐって参考にしたのですがあってますか?

require 'fileutils'

$name = ARGV.shift
$ext = ".gif"
i = 0

ARGV.each do |file|
i = i + 179
$newname = $name + sprintf("&03d", i) + $ext
print "renaming " + file + " ---> "
print $newname + "\n"
FileUtils.mv(file, $newname)
end


74 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:05:41 ]
>>73
require 'fileutils'

ARGV.each do |before|
# 0001.gif から拡張子 .gif を取り出す
ext = File.extname(before)
# 0001.gif からディレクトリ名を取り出す(無いので ./)
dirname = File.dirname(before)
# 0001.gif から拡張子抜きファイル名 0001 を取り出す
basename = File.basename(before,ext)
# 0001という文字列を数字にして178を足して0詰め数字3文字に
after_basename = sprintf("%03d", basename.to_i + 178)
# ディレクトリ名+数字3文字+拡張子 というファイル名に合成
after = File.join(dirname, after_basename + ext)
# リネームしまーす
puts "renaming: #{before} -> #{after}"
FileUtils.mv(before, after)
end

# 実行結果
~$ ruby rename.rb 0001.gif 0002.gif
renaming: 0001.gif -> ./179.gif
renaming: 0002.gif -> ./180.gif


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)
以外にないですか?







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

前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