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


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

Ruby 初心者スレッド Part 27



1 名前:1様 [2009/04/02(木) 09:42:23 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】
   【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
    ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
    ※ただし 1.8.6 より安定しているとはまだ言えないので、安定性を第一とする用途には 1.8.6 をどうぞ

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の 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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

641 名前:635 mailto:sage [2009/04/28(火) 13:17:57 ]
ごちゃごちゃやってたら、頭の中がこんがらがってきた。

結局コンストラクタに引数を渡せるようにしたままsingleton化したい場合は、Singletonモジュールは
使わずに、該当クラスのnewメソッドを複数のインスタンスを生成できないように書いてしまえばいい
だけ? とか思ったが、何か根本的に間違ってるような気もするw

クラスメソッドとしてのnewは明示的に書けてしまうみたいだけど、その場合自分(クラス)のインス
タンスを生成するコードはどうやって書けばいいのかな? newメソッドはインスタンスを返すのが
普通だから、それを生成するコードがどうしても必要だよね?

642 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 13:22:57 ]
>>640
自前ビルドでRubyを入れると、他のRubyに依存してるパッケージも全て
自前ビルドするか、パッケージの依存関係をごまかすかしなきゃならない。

どちらにしてもすごく簡単ではないけど大丈夫?

643 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 15:58:25 ]
>>641
自己レス。

特定のクラスが(自分の定義中で)自分のインスタンスを生成するには、クラスメソッド(たとえばnew)
の中で<自分の名前>.allocateを実行すればいいらしい。(allocate自体はどこからでも呼べる)

ただしそのインスタンスをinitializeするには、(自分の定義中にある)他のインスタンスメソッドを
介さなければならない。

なぜなら、<自分の名前>.allocateの戻り値をinstで受け取ったとするとinst.initializeとしたくなるが、
initializeはprivateメソッドなのでレシーバ省略形式でしか呼び出せず、レシーバ省略形式で呼び出す
には、(クラスメソッドから呼び出せる)publicなインスタンスメソッドの中で呼び出すしかないから。

644 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 18:20:00 ]
>>639
>1.8.7使うには自分でコンパイルするしかないのでしょうか?
うんそう。
UbuntsuってDebian系だよね。DebianだとRubyが複数のパッケージに分散していてインストールするのがめんどくさいから、
おれが試した時は自前でインストールするほうが簡単だった。

以下おれの方法。rubyのバージョンごとにディレクトリを分けているので、configureするときに--prefixをつけてる(つけなければ/usr/localになる)。

wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p160.tar.bz2
tar xjf ruby-1.8.7-p160.tar.bz2
cd ruby-1.8.7-p160/
sudo mkdir -p /usr/local/ruby/1.8.7-p160
./configure --prefix=/usr/local/ruby/1.8.7-p160
make
sudo make install


645 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:24:22 ]
パッチレベルすらディレクトリを分離してるのか。
まあその方が、トラブル時には切り分けやすいか…。

646 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:27:09 ]
ディスクがたくさんあっていい感じだ

647 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:29:02 ]
文字列、配列、ハッシュの初期化の書き方についての質問です。
以下のそれぞれのペアは、等価?(どっちで書いても良い?)

my_string = ""
my_string = String.new

my_array = []
my_array = Array.new

my_hash = {}
my_hash = Hash.new

648 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 19:35:46 ]
>>647
Yes

649 名前:647 mailto:sage [2009/04/28(火) 19:37:17 ]
>>648
どうもありがとうございます!



650 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 22:30:36 ]
>>643
inst.instance_eval{initialize} じゃダメ?

651 名前:デフォルトの名無しさん [2009/04/28(火) 22:35:42 ]
さすが マーチンファウラーお気に入りのベストパートナー
世界に羽ばたく
Ruby on Railsオフショアアジャイル開発
www.tech-arts.co.jp/news-and-topics/press-releases/20090427.html


652 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 23:17:58 ]
てか self.class.new でダメなことって少ないよな

653 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 00:17:47 ]
今まで数年間、テキストエディタのみでプログラミングしていたのですが
そろそろIDEにも、試しに手を出してみようかと考えています

Rubyに対応したIDEを探してみると、RDEの他には
Aptana Rails、NetBeans、Eclipse DLTKが見つかったのですが
これらの中で「これがオススメ」というものはありますか?
シンプルで理解が難しくないものを求めているのですが……

654 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 00:44:01 ]
特にありません

655 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:02:37 ]
テキストエディタのみとかおれには考えられん
環境がなかった昔はもちろんやってたけどな

656 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:23:39 ]
俺は今のところ IDE なしでもそんな不便はしてないかな
Cygwin + bash + vim + rake + 自作ツールっていう構成だけど

ただ、やってるうちに Rakefile がでっかくなっていくけどw

657 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 02:02:23 ]
テキストエディタのみって言っても
UNIX環境の支援のもとに emacs やら vim 使ってるのと
Windowsでメモ帳とか使ってるのとでは全然違うよな

658 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 04:01:50 ]
emacs + αで十分IDEチック

659 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 06:02:34 ]
メモ帳はまさにメモ帳であって。

emacsはフルカスタマイズ可能!ってか。
変態的な操作方法をもちょっと控えて、GUIベースのタブでバッファを切り替えるような
ものなら、もうちょっとご新規さんにもアピールするかと思うんだが。



660 名前:639 mailto:sage [2009/04/29(水) 09:15:30 ]
>>642
そうなのかー。

>>644
バージョンごとにやってるんですか。うおすごいですね。
コンパイル自体は大変ではないみたいですね。
問題はバージョンアップかあ。
aptとかで入れれたらうpでとも自動化できるのになあ

っと思って検索していたら、8.10のパッケージを使って1.8.7を入れる方法を見つけました。
最近のUbuntu では Ruby 1.8.7が標準みたいですね
簡単そうなので、まずは、これから試してみたいと思います。

Installing ruby 1.8.7 (and guessnet) on Hardy ? vanutsteen.nl => nerds only
www.vanutsteen.nl/2008/06/29/installing-ruby-187-and-guessnet-on-hardy/


スレ違いそうな話題にレスしていただきありがとうございました。
とういか、Ubuntuスレに投下してたつもりでしたw

661 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 09:26:19 ]
>>659
(EmacsをEmacsとして理解できないものには)Emacsを使うのは難しい。

Aquamacsだとタブが出るけどな。

662 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 11:35:56 ]
>>643
たぶん普通は

require 'singleton'
class C
include Singleton
def initialize
@i = nil
end
attr_accessor :i
def self.init(i)
c = self.instance
c.i = 1
c
end
end

p C.instance #=> #<C:0xb7d853e4 @i=nil>
p C.init(1) #=> #<C:0xb7d853e4 @i=1>
p C.instance #=> #<C:0xb7d853e4 @i=1>


663 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 12:08:41 ]
>>662
それを許すんならもはや定数に代入した普通のオブジェクトと変わらない気が

664 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 12:24:00 ]
ていうか、読みにくい

665 名前:635 mailto:sage [2009/04/29(水) 15:10:47 ]
みなさんレスありがとうございます。

>>650
> >>643
> inst.instance_eval{initialize} じゃダメ?

それでよさそうですね。初めて知りました。


もともと>>635と書いたのは、「引数を渡したいのは初期化の時だけだが、一度instanceしてから
値を渡すのが面倒」というのがあったからなので、>>662のやり方が簡単で良さそうです。

>>662の中の
> c.i = 1

> c.i = i
ですよね。

結局自分もsingletonにする意味あんまりないなと思い始めてしまってますが、最初の動機がたいした
ことじゃなかったということですね。

666 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 15:44:41 ]
ruby-pg-0.8.0ってPGresultのresultって使えますか?
num_tuplesとかは正常なのにresultとかstatusだとNoMethodErrorになります。
今までずっと古いやつを使っていたんですがメソッド名が変わったりとかしたんですかね?

667 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 18:01:56 ]
>>666
おお!俺も数日前にそれで困ってましたw

俺がしたこと
1) requireの置き換え
require "pg" # require "postgres"

2) resultメソッドの置き換え
res.map {|rowmap| res.fields.map {|f| rowmap[f]}} # return res.result

resultが無くなったのか、名前が変わったのかは知りません。
statusのほうは使ったことがありませんのであしからず。

668 名前:666 mailto:sage [2009/04/29(水) 18:39:50 ]
>>667
ありがとうございます!取得できるようになりました!

根本的な原因は気になりますが、
とりあえず動くようになったのでよしとします。

669 名前:653 mailto:sage [2009/04/29(水) 18:58:20 ]
いろいろなご意見ありがとうございます!
基本的にエディタ派の方が多いようですね
ただ、655さんの環境も気になります

>>657
Windows環境で、主にNotepad++を使ってスクリプトを書いております
コマンドライン環境はNYAOS+GnuWin32の構成です



670 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 12:34:03 ]
>>669
>>625-627から上の流れも参照してくれ

671 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 18:29:51 ]
VRFormってどこにあるの?rubyのフォルダを検索しても見つからない。
ほとんどのコントロールはvrcontrol.rbにあるのに。

672 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:25:00 ]
Array同士を簡単に同じでない行を調べることってできませんでしょうか?
a - a2みたいだと、差分という感じではない気がします。
通常のdiffツールだと、出力結果が上から調べるので順番に依存してしまいます(´・ω・`)

673 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:26:40 ]
>>672
あああああ、
pp (a2 - a)
pp (a - a2)
とお互い引けば、いいのかw

書いて気づいた
同じでない行ではあるか

674 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 09:44:33 ]
メソッド呼び出しにおいて、メソッド名と引数を囲む括弧の間には、
スペースを入れないことをおすすめする。

675 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 17:16:25 ]
排他的論理和は (a|a2) - (a&a2) でも

676 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 17:32:42 ]
エクスクルゥーシブー・オアッ!!

677 名前:デフォルトの名無しさん [2009/05/02(土) 19:53:16 ]
勉強始めたらいきなりこんなもん見つけたんですけど。
バグでしょ?
#ruby 1.8.7p72 mswin32
module A
def f()
print "test ok!\n"
end
end
#include A
A::f()

test.rb:7: undefined method `f' for A:Module (NoMethodError)
ちゃうか〜

678 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:57:48 ]
>>677
ttp://www.ruby-lang.org/ja/man/html/Module.html#module_function
素のままだと「Aというオブジェクト」がもってるメソッドじゃないし。

679 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:58:24 ]
Rubyに限らないけど、まず自分のプログラムに問題がないか考えた方がいいよ。
2〜3回くらい恥をかけば直るんだけどね。最初からかかないことにこしたことはない。



680 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 19:59:58 ]
Rubyのめんどくさいところにいきなりぶつかるセンスは賞賛に値すると思う

681 名前:デフォルトの名無しさん [2009/05/02(土) 20:17:12 ]
そっか、バグじゃないかぁ
コメントアウトしてあるinclue Aを生かすと、動作しちゃうんですけど。
変じゃね?

682 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 20:19:44 ]
>>681
どうしてコメントをはずすの?
なんのためにコメントをはずすの?

683 名前:677 [2009/05/02(土) 20:32:47 ]
なんのためにといわれても...
テストプログラムだからいろんなケースを比較して、
変じゃないかなと

684 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 20:39:47 ]
つまり、意味もわからずincludeしたりしなかったりを試していると。


685 名前:677 [2009/05/02(土) 20:56:15 ]
print Math::PIは動くね。
もっとも、Mathはrubyインタープリターによって
特別待遇を受けているだろうから、あまり比較にはならんだろうけど。


686 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 21:18:41 ]
>>685
>>681は目の付け所いいなと思ったけど・・・
Module#module_functionは読んだ?

687 名前:677 [2009/05/02(土) 21:37:08 ]
なるほど、すくなくとも仕様であることは、理解しました。
どうもありがとうございます。
しかし、なんとも不可解に見える仕様。でも、理由があるんでしょう。
勉強します。

688 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 21:37:55 ]
>>683
ちゃんと理由を考えながらテストしないと、あまり意味がないぞ

結論から言うと理解を間違えている
A::f() の形でメソッドを呼びたいなら、次のような方法を使うべき
(他にも特異クラスを使った方法とかあるけど、ここでは省略)

1.
def A.f()
end

2.
module A
 module_function

 def f()
 end
end

689 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 22:54:31 ]
module_functionというのは知らなかったので試してみた。
折角なので張っておく。 これで>>677の疑問も解けるとよいけど。
irb(main):001:0> module M
irb(main):002:1> def self.f() [:module, self] end
irb(main):003:1> def f() [:instance, self] end
irb(main):004:1> module_function
irb(main):005:1> def mf; [:module_function, self] end
irb(main):006:1> end
irb(main):007:0> class C
irb(main):008:1> include M
irb(main):009:1> def cmf() mf end
irb(main):010:1> end
irb(main):011:0> c = C.new
=> #<C:0x28de620>
irb(main):013:0* M.f
=> [:module, M]
irb(main):014:0> C.f
NoMethodError: undefined method `f' for C:Class
irb(main):015:0> c.f
=> [:instance, #<C:0x28de620>]
irb(main):016:0> M.mf
=> [:module_function, M]
irb(main):017:0> C.mf
NoMethodError: undefined method `mf' for C:Class
irb(main):018:0> c.mf
NoMethodError: private method `mf' called for #<C:0x28de620>
irb(main):019:0> c.cmf
=> [:module_function, #<C:0x28de620>]
irb(main):020:0> include M
=> Object
irb(main):021:0> mf
=> [:module_function, main]



690 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 23:12:33 ]
さっきのを書いている間に生じた疑問がひとつ。
親クラスのクラスメソッドは継承されるけど、
インクルードしたモジュールのクラスメソッド(?)は継承されない。
module_functionのクラスメソッド側もやはり同じ。

いったいどういう理由でこうなっているの?

irb(main):001:0> module M
irb(main):002:1> def self.f() [:module, self] end
irb(main):003:1> module_function
irb(main):004:1> def mf() [:module_function, self] end
irb(main):005:1> end
irb(main):006:0> class C0
irb(main):007:1> def self.cf() [:class, self] end
irb(main):008:1> end
irb(main):009:0> class C < C0; include M end

irb(main):010:0> C.f
NoMethodError: undefined method `f' for C:Class
irb(main):011:0> C.cf
=> [:class, C]
irb(main):012:0> C.mf
NoMethodError: undefined method `mf' for C:Class
irb(main):013:0> C.new.mf
NoMethodError: private method `mf' called for #<C:0x28d636c>

691 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 08:53:23 ]
実はrubyにはクラス(モジュール)メソッドという仕組みはなくて、クラスに定義された
特異メソッドが他の言語のクラスメソッドと同じように使えるだけ(と思ってる)
クラスの継承で特異メソッドが継承され、includeでは無視されるのは仕様としか
大体「クラスメソッド」として使うんだから「クラス名.メソッド名(引数)」の
クラス名にはメソッドが定義されているクラスを使うべきだろう

692 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:01:17 ]
継承してないから継承されない
じゃ駄目かね

693 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:25:37 ]
Mix-inてのは親子関係が木構造になるように制限をした多重継承だと
理解していたんだけど、Rubyのモジュールはちょっと違うということかな。

上のコードでいうと、c is_a M だけど C is_a M ではなかったから、一瞬
そういうものかと思ったものの、 C is_a C0 というわけでもなかったぜ。
うーん、いまいち腑に落ちないな。


694 名前:デフォルトの名無しさん [2009/05/03(日) 20:27:14 ]
>>690
メソッドを継承すると遮蔽定義によって、メソッドの動作を変更できてしまう
からじゃね?
モジュールは多重にインクルードできるから、継承経路によって、
振る舞いが変わる可能性があるので、そういう仕様になってるんじゃねえかなぁ
よくわからんけど

695 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 21:57:18 ]
>>690
>親クラスのクラスメソッドは継承されるけど、
>インクルードしたモジュールのクラスメソッド(?)は継承されない。
>module_functionのクラスメソッド側もやはり同じ。
>いったいどういう理由でこうなっているの?

そういう仕様だから。
もちょっというと、includeはメタクラスには影響を与えないから。
自分で調べるなら「Ruby クラス階層図」でぐぐるといいかも。

696 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 22:56:40 ]
あの辺の理論はこんがらがる
Class.class => Classって辺りで混乱が最高潮

697 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 23:53:39 ]
弾幕シューティングのやり過ぎで >>690-691 の irb が、全部敵弾に見える

698 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 00:47:42 ]
>>697の気持ちは残念ながらわかってやれないが
整形されてないとここまで読む気が失せるものだと再認識させられた

699 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 00:51:52 ]
Linux 版のデフォルト設定の irb は死ぬほど見づらい
デフォルトで行番号表示つけるならもっと履歴を使いやすくしろ
っていうか irb で出る例外の 99 パーセントは直前行だろ需要考えろよ



700 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 00:58:40 ]
そういや、irb使ってるとき、ついシェル感覚で !10 とかタイプ
してしまう。そして
=> false
という出力をみてはじめて気付く。

!p
=> true
とやってしまったときは、何がおきたか一瞬わからなかった。




701 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 02:42:13 ]
wirbleかutility_belt使ったらどうだろう。
utility_beltはWindowsだとダメポだったけど

702 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 11:21:11 ]
~/.irbrcに最低これくらいは書いとくよね

# vim:ft=ruby
require 'irb/completion'
__history__ = File.expand_path('~/.irb_history')
File.foreach(__history__) {|line| Readline::HISTORY.push(line.chomp) }
END { File.open(__history__, 'w') {|f| f.puts Readline::HISTORY.to_a.join("\n") } }
IRB.conf[:PROMPT_MODE] = :SIMPLE


703 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 11:34:09 ]
あーいるよな、デフォルト設定の話してるときに「カスタマイズすればいい」とか脳のとろけた話する奴

704 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 12:06:20 ]
もんだいはどちらがコストが低いかと言う話になる。
この場合、カスタマイズの例を実際に >>702が出してくれたので、
irb本体に手を入れるよりよほど簡単である。

許されてもよいのではないか。

RubyGemsで一発で解決することに対して、数行のモンキーパッチで解決するならまだしも、
長々とスクリプトを書くのであれば、どちらがコストが低いかは自明

705 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 12:20:13 ]
自演乙

706 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 14:09:22 ]
まあそのへんは果てしなくどうでもいい

707 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 14:53:41 ]
自分用のスクリプトで引数にキーワードハッシュでも文字列ハッシュでも通常引数でも動作するようにしたり
クラスメソッドでparseみたいな総合一連動作メソッドを作りまくったりしてると
YAGNIということばを思い出す

オチはとくにない

708 名前:デフォルトの名無しさん [2009/05/04(月) 17:18:06 ]
標準入力から読み込んだ画像を表示するビューアを探しているのですが、探す暇もない(面倒)なので
自分で簡単なビューアを作ろうとruby-gtk2のリファレンス読んでいたのですが...
(まあこんな感じ cat image.jpg | imageviewer)

Gtk::Imageをざっと目を通したところ、画像ファイルの名前を指定するようですが
$stdin.read とか指定できませんかね?

709 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 17:50:50 ]
あのへんはRuby関係ないからなー



710 名前:デフォルトの名無しさん [2009/05/04(月) 17:55:29 ]
708だけど、imagemagickで実現できたわ(^^
$ cat image.jpg | display でおk。

まあimagemagickも/tmp/magick-Xxxxのような一時ファイルを作成しているから
同じようにすればいいのかな。。

711 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 18:35:20 ]
>>709
2ch は、7割が脱線で出来ています。

712 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:05:28 ]
>>708
前に画像ビューア作ってたとき、漏れはこんな感じで
PixbufLoaderとcairo使ってごにょごにょやってた

require "gtk2"

ploader = Gdk::PixbufLoader.new
ploader.write($stdin.read)
ploader.close

drawing_area = Gtk::DrawingArea.new
window = Gtk::Window.new
window.signal_connect("destroy") do
Gtk.main_quit
false
end

drawing_area.signal_connect("expose-event") do |w, e|
context = w.window.create_cairo_context
context.save do
context.set_source_pixbuf(ploader.pixbuf)
context.paint
end
true
end

window.add(drawing_area)
window.show_all
Gtk.main

713 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:29:24 ]
なんでRubyでそういうの作ろうと思うのかね
もしかしてRubyしか使えないとか?

714 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:34:41 ]
Rubyからアクセスすれば簡単手軽に作れるからだろ


実際問題として簡単でも手軽でもないような気もするがまあそれはそれで

715 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:41:59 ]
楽だから

716 名前:デフォルトの名無しさん [2009/05/04(月) 20:44:45 ]
Rubyで書くと おちんちんきもちいいお(´;ω;`) だから

717 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 22:25:51 ]
708でも712でも無いけど、どうしても速度が欲しければjavaかCで書く
でも普段はそんなん必要ないから楽ちんなrubyで書く
>>713なら何で書くのさ?アセンブラ?まさかマシン語とか?

718 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:39:46 ]
vistaのローカルにいれているRubyの1.86を
1.9xにアップグレードしたいのですが
インスト方法どこかに書いてありますか?


719 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:58:12 ]
それはアップグレードではなくアンインストール後の新規インストールになるな



720 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 01:18:23 ]
>>718
あなたは、1.9x を使う要件を満たしません。
1.8x を使い続けてください。

721 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 01:20:10 ]
まだヘソ曲げてんのかよw

722 名前:718 mailto:sage [2009/05/05(火) 01:57:45 ]
できました。
1.86アンインスト

1.9x解凍、C:\に置く

windowsのシステム環境変数書き換え

でしたね、できました。
複数バージョン置けたんですかね。
記法が変わりすぎで1.9xの中心にしか
覚えませんが。。

723 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 16:05:42 ]
RDEを使いたいと考えて、インストールして、実行してるんだけど
以下のコードを書いたらエラーっぽいメッセージがRDEから出でる。

----------------------
a = []
a.each do |x|
x.
----------------------

メッセージ
Access violation ta address 004B0137 in module 'rde.exe'.Read of address 00000015.

x.の"."を打ったところで出るので、オブジェクトのメソッドを取得しようとして失敗しでもしてるのだろうか?
エラーメッセージをとりあえず無視してるのだけど、気味が悪いので、対策知ってる人がいたら教えてください。



724 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 19:19:30 ]
    || 時刻1 | 時刻2 | 時刻3 | …
------------------------------
分類1 || d_1_1 | d_1_2 | d_1_3 |
分類2 || d_2_1 | d_2_2 | d_2_3 |
分類3
  :

というスプレッドシートっぽい概念がしっくり来るデータがあります
(実際は2系統が直接関連付けられてないバラバラなハッシュです)

データ.category("分類1") とすると [d1_1, d1_2, d1_3, ...] というようにす

725 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 19:21:48 ]
…悩んでたら途中で送っちゃった
こんなごっつい構造のデータでなくてもいいような気がさっきからずっとしてるので
とりあえずキャンセルしますごめんね

726 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 19:51:04 ]
キャンセル吹いたw

727 名前:受付嬢 mailto:sage [2009/05/05(火) 21:45:30 ]
また、いらしてください

728 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:36:29 ]
以前から不思議だったんだが
RDEはなぜこれほどまでにバグだらけなのだろう
何か理由があるのだろうか

729 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:39:43 ]
マジレスすると玄人が使わないからバグ報告が少ないとかじゃないか



730 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:53:24 ]
どこからかだったか忘れたけど

require 'irb/completion'
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 99999
IRB.conf[:PROMPT_MODE] = :XMP
require 'pathname'
require 'fileutils'
require 'uri'
require 'pp'


731 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 22:55:50 ]
使われない→バグが取れない→使われない・・・・の
負のスパイラルに陥ってる可能性が

732 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 23:31:59 ]
剰余の挙動が意味不明で躓きそう
0xcc.net/blog/archives/000083.html
こんなもんなんすか?

733 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 23:50:54 ]
>>732
スレタイのRuby初心者となんの関係もない話題だが、
Division and Modulus for Computer Scientists でも読んでみたら?

734 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:55:50 ]
>>733
ttp://research.microsoft.com/en-us/um/people/daan/download/papers/divmodnote-letter.pdf#search=%27Division%20and%20Modulus%20for%20Computer%20Scientists%27
Floored divisionってくだりですね。
剰余と除数の符号が揃うまで
試行する。。なるほど。。

Web業界とはいえ企画職で
文系には小一時間かかりました(笑
ありがとうございます。

735 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 07:14:15 ]
>>732
おいおいスクリプト言語ぜいが全然周りと違ってて吹いた。
下手するとハマるね、これは。
こういうのって何かで規定されてないのかね…。

AA化してみた

負の剰余

       C   Java   PHP  Emacs Ruby Python Perl
      (GCC (Sun JDK 4.3.10 22.0.50.2 1.8.2  2.3.5  5.8.4
      3.3.5) 1.5.0_05)   -16
 -3 % 5  -3   -3     -3   -3    2     2    2
.  3 % -5   3    3     3    3    -2   -2  -2
 -3 % -5  -3   -3     -3   -3    -3   -3  -3

こんなプログラムはいやだ: 負の剰余 - bkブログ
0xcc.net/blog/archives/000083.html

736 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:03:39 ]
個人的にはスクリプト言語勢の振る舞いがしっくり来るなあ。
しかし数学的な定義はないのか?ありそうだが。

737 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:16:14 ]
定義されてるよ。

「 A mod B は "AをBで割った余り"」だから「B と商 x をかけて剰余を足すと A に戻る」でいいよな?

-3 mod 5 = -3 だとする場合 (C言語)
 5 と 商 0 をかけて剰余 -3 を足すと 5 * 0 + (-3) = -3 に戻る…正解
-3 mod 5 = 2 だとする場合 (スクリプト言語)
 5 と 商 -1 をかけて剰余 2 を足すと 5 * (-1) + 2 = -3 に戻る…正解

ということで、そもそも2通りあるから、「どっちでもいい」。
手計算の世界では「剰余は商より小さい正の整数」という条件がついてたりするんだけど
(「10割る3」は「商3余り1」であるべきで、「商4余り-2」ではないと習ったはず)
C言語は「割られる数が負なら絶対値で計算して結果を負に変換する」という流儀に従ってる。
まあ、剰余に関しては言語のマニュアル必ず読めって感じだな。

738 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:41:01 ]
CやC++なんかの仕様では
  「割る数と割られる数の両方が正である場合は商と剰余は必ず正であるが、
  少なくともどちらかが負である場合は定義しないので処理系が得意なように作れ」
とかヤな感じに丸投げなことが書いてあったはず

739 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:50:02 ]
>>738
CやC++の場合は、コンパイラが、「俺は知ったこっちゃねぇ。CPUに任せる」という
コード生成ができるという利点がある。



740 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 08:57:32 ]
ってことは正確を期したいならどんな言語使うにせよ
正負の確認処理を挟むべきってことか

741 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:00:49 ]
負の除算は意図をもって行われるべきだってことだね
まあ、コンピュータにおける除算自体がそもそも日常視点では怪しさのカタマリだから慎重になるべきなんだけどさ

742 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:02:23 ]
>>740
確認したってどうせ一つしか結果は出てこないんだから、
それなら最初から自分で関数組んだ方がw

743 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:09:01 ]
一般的用途においては割る数と割られる数の両方を事前に絶対値とって使うべきかね
剰余を使う機会で負になるのはたいてい割られる数だし

744 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 09:26:39 ]
>>723
hpcgi2.nifty.com/sakazuki/forum/wwwforum.cgi?id=1&az=thread&number=250
自分の場合、ここを参考にver1.0.1をインストールした後にver1.1.1を上書きインストールしたら
エラーが出なくなった。

745 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 10:09:29 ]
>>744
ありがと!
足りないファイルを1.0.1からコピーしたらエラーでなくなったよ

746 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 10:23:58 ]
>>735
>>736

数学的にどうこうってのは737の書いたとおりで
en.wikipedia.org/wiki/Modulo_operation
に、いろんなプログラミング言語でどっちなのかまとめている表があるよ。

両方持ってる奴もあるんだなw


747 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 17:37:44 ]
rspec 使って遊んでます

「大量のファイルやら外部参照やらがあり、きちんと動作することが現状
 おおむねわかりきってるひとまとまりの部分のテスト」

「今テストしたい部分を繰り返しテストして試す」
という行為にちょっとジャマ(処理に時間かかるし、ファイルアクセスがなんとなく無駄)です

if false # 終わったので一旦スルー
 …
end

で囲うというのも考えたんですが、なんかこうスマートな考え方はないもんでしょうか?

748 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 18:02:36 ]
>>747
つ pending

外部と接続する部分は、mockがうまく利用できる形に持っていくのもよい。


749 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 18:38:14 ]
>>747
スペックファイルを分割すればいいのでは?



750 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 18:44:56 ]
ネットからファイルを取得する処理のあるスクリプトなんかは困るよね
specコマンド連打するたびにGETが大量に起こったり

751 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:25:25 ]
そんなの、specファイルの中でメソッド再定義すればいいじゃん
サーバへアクセスしてる部分を事前に保存しておいたローカルのファイルを読むように書き換えればいい

752 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:32:53 ]
specファイルの中でオリジナル書き換えたらオリジナルのテストになんねえよ

753 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:35:55 ]
なんという正論

754 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:39:41 ]
>>752
そのメソッドをテストするときだけオリジナルの動作になれば問題ないだろ
html = $TEST_HOGE ? File.read("local.html") : open(uri).read

755 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:43:27 ]
「実際にネットワークからモノを取ってくるオブジェクトX」自体
のテストではネットワークを使わざるをえないが、それのテストが
十分出来ているなら、Xの利用者をテストする際には、Xはmockで
代用できる。






756 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 19:50:49 ]
>>754
実質的な動作は同じだしな
テストできないで終わるよりずっとマシ

757 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:12:53 ]
>>754
だからこうするんだってば
def get(uri)
 return uri.read
end
  ↓
def get(uri)
 return File.read('local.html')
end


758 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:21:04 ]
>>757
微妙・・・
テスト内の複合バグとかさくさく作り込みそうに見える。
元のコードがみんなシンプルなものならいいかもしれないけど。
mockとかstubってのはそういう書き換えをしなくていいためにあるんじゃないの?

ttp://www.ibm.com/developerworks/jp/web/library/wa-mockrails/
とか
ttp://d.hatena.ne.jp/takihiro/20081023/1224762895
とか読んでも全く使い方はわからんかったが

759 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:27:58 ]
コストのかかる部分を全部メソッドとして吐き出せるようにクラスを作る
そうすればその部分のメソッド定義を書き換えるだけでテストが書きやすい



760 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:30:49 ]
インスタンス変数をメソッド内で利用するとテストで条件変えたときに書き換えられないから、
全部引数で渡すようにするのがポイント

761 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:33:50 ]
RSpecのテストに対応させてスクリプトを作ると諸記述が2ランクくらい退化するというのはよくある

巷のRSpecの解説は一番大事なことをあえてすっ飛ばしてると思うんだ

762 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:35:00 ]
>>759
なるほど

>>760
こっちは・・・どうなんだろう。

いずれにせよ、テストしやすい書き方も大事ってことか。

763 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:39:02 ]
>>761
describe と before と it と should と eql しか使わせる気がなさそうな説明はいくつか…
これしか使わなくてもテストは書けるのでタチが悪い
これ以上のことを説明する気がないのならむしろRSpecを使わせないほうが効率も能率も高い

764 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:41:20 ]
>>763
なにそのるびま

765 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 21:11:43 ]
rspec といえば、あれって「○○と表示されること」をテストするのってどうするん?

766 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 21:40:48 ]
>>764
素晴らしい先駆者であるがゆえに失速の影響が…


えー、「内部の○○メソッドを今は動作したことにしたい」というカジュアルな用途には、stub! が使えると思われ

require 'spec'; require 'open-uri'
class Hoge
def get(uri); open(uri).read; end
def pick_title(uri); get(uri).scan(/<title>(.+?)<\/title>/).to_s; end
def main
pick_title('www.example.com/')
end
end
# -----------------------
describe Hoge do
before :all do
@hoge = Hoge.new
end
describe "#main: サーバからHTMLを取得してタイトルを表示する" do
it "たいとる!" do
@hoge.stub!(:get).and_return('<html><title>たいとる!</title></html>')
@hoge.main.should eql('たいとる!')
end
end
end

「@hoge の get メソッドが呼ばれたときは処理を横取りして and_return の引数を代わりに返すようにする」という記述
あんま小難しいこと考えなくていいのでとっても便利

767 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 22:23:06 ]
…これはこれで stub! ばかりになりそうw

768 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 03:40:20 ]
rspecにはTest::Unitの-nオプションみたいにテストを限定する方法はないの?

769 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 05:45:40 ]
>>750
つ FakeWeb

外部URLを偽装するテスト用ライブラリ「FakeWeb」
doruby.kbmj.com/x5r_on_rails/20090427/_URL_FakeWeb_1

MOONGIFT: ≫ Web API/Mashup開発者に必須!オフラインでも外部アクセスをテストできる「FakeWeb」:オープンソースを毎日紹介
www.moongift.jp/2009/04/fakeweb/

まあ、こういうのをスタブ?っちゅーらしいが



770 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 00:15:40 ]
str = String.new
p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65

#ふー。。。

771 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:35:21 ]
require 'pstore'
h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'a' << 'b' << 'c'
PStore.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h}

これを実行すると
/usr/lib/ruby/1.8/pstore.rb:349:in `dump': can't dump hash with default proc (TypeError)
と言われます。
既存のハッシュを「無難な」ハッシュに変換してそれをまた戻す方法とかないもんでしょうか

772 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:46:17 ]
うわー
それじゃデフォルト値つきの配列やハッシュって駄目じゃん
普通の配列やハッシュのつもりで誰がMarshalするかわからないんだし怖くて使えん

773 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:48:31 ]
hh = Hash[h] ではどう?

774 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:51:42 ]
>>772
Proc つきのまま外に出すなってことなんだと思う
デフォルト値つきのハッシュはデータ製作用の仮形態のみにしておく

require 'pstore'
def makedata
h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'a' << 'b' << 'c'
return Hash.new.merge(h)
end
h = makedata
PStore.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h}

これなら動作する
開発者側が気を遣えってことなんだろうな

既存の誰かが作った(そしてどこに初期値つきハッシュが使われてるのかよくわからん)データを
マーシャル可能な形態に変換する方法は知らん

775 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:01:39 ]
>>771
いっそのことYAMLにしてしまうとか
require 'pp'
require 'yaml'

#h = {0 => Array.new}
h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'A' << 'B' << 'C'
h["mage"] << '100' << 1234.56 << :hage

pp h
puts

y = h.to_yaml
puts y
puts

new_h = YAML.load(y)
pp new_h

pp h == new_h

776 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:05:25 ]
わざわざ PStore するってことはオブジェクトとして一時保管したいのだろう
YAML ではどうにもならん気もする

777 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:06:03 ]
では、yaml/storeで

#!ruby -Ku
$KCODE='u'

require 'pp'
require 'yaml/store'
#require 'pstore'

h = Hash.new{|h, k| h[k] = Array.new}
h[0] << 'a' << 'b' << 'c'
YAML::Store.new('_hoge_.pstore').transaction{|pstore| pstore[1] = h}

778 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:06:48 ]
あああ、てか、procごと保存して復元したいってことなのか?PStoreってそこまで対応しとるノン?

779 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:11:50 ]
Rubyist Magazine - 標準添付ライブラリ紹介 【第 9 回】 PStore
jp.rubyist.net/magazine/?0016-BundledLibraries

> IO や Proc などの Marshal.dump が出来ないオブジェクトは保存することが出来ませんが、
> Marshal.dump 出来るオブジェクトなら何でも保存できて、Marshal.load 出来るものは何でも読み込めます。

駄目なんすね・・・まあ普通考えたらそうか

procで詰まるってことは、後でevalれるコードを格納できるように、
って難しく考えないで、1個1個個別対処しかないんじゃないのかなあ。
復元時にprocを戻すようにというか、Hash.new{|h, k| h[k] = Array.new} 生成して再代入と言うか



780 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:19:55 ]
一応>>774が答ではあるのだろう
出しっぱなしにならないようにクラス製作者に気をつけてもらうしかなさそうだ
デフォルト値の動作が重要な代入可能な配列なんかを提供する場合は
Procつき配列をそのまま出すのではなくそういうデフォルト動作をするメソッドを自力で作れと

781 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 12:22:55 ]
めんどいな

782 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 15:34:57 ]
class MyHash < Hash
def initialize(*args)
super {|h, k| h[k] = []}
end
def marshal_dump
Hash.new.update(self)
end
def marshal_load(data)
update(data)
end
end


783 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 17:43:17 ]
マニュアルのとこにちょろっと書いておいてくれるとよかったのにね
「ただし、ブロックは Proc なのでこのままではオブジェクトを Marshal することができません。Hash#merge して下さい」とか

784 名前:753 mailto:sage [2009/05/08(金) 17:49:20 ]
>>728
同じ事を考えたんだけどmarshal_loadしたオブジェクトは
initializeされてないからdefault_procが再設定されてないのよ

h = MyHash.new
h[0] << 'a' << 'b' << 'c'
h = Marshal.load(Marshal.dump(h))
h[1] << 'a' << 'b' << 'c'
#=> undefined method `<<' for nil:NilClass (NoMethodError)

initialize以外でdefault_procは設定出来ないしどうしたもんかね

785 名前:784 mailto:sage [2009/05/08(金) 17:51:39 ]
名前欄は無視してくだしあ

786 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 19:52:10 ]
>>770
>p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65

これって fusiあな、、?

787 名前:デフォルトの名無しさん [2009/05/08(金) 20:39:17 ]
TSUKARETA

788 名前:デフォルトの名無しさん [2009/05/08(金) 20:39:48 ]
$ irb1.8
irb(main):001:0> str = String.new
=> ""
irb(main):002:0> p str << 84 << 85 << 75 << 65 << 82 << 69 << 84 << 65
"TUKARETA"
=> nil
irb(main):003:0>


789 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:21:55 ]
String.new << e

は、e.to_s した結果を末尾に追加するべきだと思う



790 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:26:18 ]
まあ ASCII コードの取り扱いのへんはいろいろシガラミがあってだな

791 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 23:26:20 ]
Rubyユーザとは思えない>>772のレスのせいで初心者が混乱しかねないので、
一応言っとく。

○デフォルト値はあってもMarshalできる(もちろんpstoreも)

h = Hash.new(1)
h = Marshal.load(Marshal.dump(h))
p h[:foo] #=> 1

○ダメなのはdefault_proc

h = Hash.new {}
Marshal.dump(h) #=> can't dump hash with default proc (TypeError)

○default_procはHash#default=で消せる

h = Hash.new {}
h.default = nil
h = Marshal.load(Marshal.dump(h))
p h #=> {}

○配列にデフォルト値などない

a = []
a.default = 1 #=> undefined method `default=' for []:Array (NoMethodError)

792 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 23:31:13 ]
>>784
Hash#default_proc=

793 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 01:38:12 ]
>>792
このスレでは1.9をデフォと思わないほうがいい。


794 名前:784 mailto:sage [2009/05/09(土) 01:46:48 ]
>>792
1.8.7だと undefined method になっちゃう(1.8.8とかで取り込んで欲しいな)
てかinitialize呼んじゃってもいいのね
def marshal_load(data)
 update(data)
 initialize {|h,k| h[k] = Array.new }
end

# あとアンカも間違えてた ×>>728>>782

795 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 02:43:48 ]
asobi.sqweebs.com/learn/1.php

Rubyではこんなの、作れないっしょ!

796 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 05:34:28 ]
てか、自分でクラス作ってるならこんな面倒なことしなくても
「該当部分の見当つくんだから空のハッシュとマージさせとけ今からやれ」で終了なわけで
ソース読むのめんどいくらいの他人様のライブラリを仮定してると思われる以上
そこで「1.9ならできる」というのはいささか的外れな気もする

797 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 07:48:41 ]
>>791
こういうのまとめたwikiが欲しいな…
RubyのFAQ用のwikiみたいなのってなかったけ?

798 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 08:40:47 ]
>>797
マニュアル嫁

799 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 08:43:37 ]
>>797
WikiのURLがいつのまにかテンプレから外されてるな
どっちも更新少ないから無理もないが

■ちょっと前にできたWiki
Ruby 初心者スレッド Hiki
starlet.s145.xrea.com/ruby/hiki/
Ruby Portal
ruby.morphball.net/portal/



800 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:19:06 ]
>>791
Ruby 初心者スレッド Hiki - PStore、Marshal関係
starlet.s145.xrea.com/ruby/hiki/index.cgi?PStore

転記しておいた

801 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:59:13 ]
質問です
オブジェクトが、あるモジュールに含まれるクラス群のインスタンスであるかどうかを
調べる簡単な方法はありますか?

現在、
obj.class.to_s =~ /MyModule/

みたいな判定の仕方をしているのですが、こういうことに正規表現マッチを
使うのも大げさな気がします。もっと簡潔なやり方はないでしょうか。

802 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 10:15:23 ]
obj.is_a?(MyModule) で用が済まなくなったらまた来てくれ

803 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 10:30:33 ]
>>802
済まないと思う

obj = MyModule::KlassA::Sub.new
obj = MyModule::KlassB::Sub.new

という可能性があるときにたとえば

if class_include_klassA(obj) then
 # obj が MyModule::KlassA::Sub だと期待した処理
elsif class_include_klassB(obj) then
 # obj が MyModule::KlassB::Sub だと期待した処理
...

というようにしたいのだろう
そうすること自体がなんか方向性間違ってるような気もするが

804 名前:801 mailto:sage [2009/05/09(土) 10:52:24 ]
>>802
すいません。言葉足らずでした。
MyModule はトップレベルに include されているため、コアクラスもみな
is_a? に対し true を返すという状況です。




805 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 10:55:06 ]
ん?

806 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 11:05:52 ]
>>801
あるモジュールに含まれるクラスのサブクラスのインスタンスの時はどうするの?
module Mymod
 class A
  # あるモジュールに含まれるクラスのインスタンスか調べるメソッド(仮)
  def nesting?(mod) ; self.class.name =~ /#{mod}/ ; end # その一
  def nesting?(mod) ; Class.nesting.include?(mod) ; end # その二
 end
end
class B < Mymod::A ; end
Mymod::A.new.nesting?(Mymod) #=> 0(true)/true
B.new.nesting?(Mymod) #=> false/true

807 名前:801 mailto:sage [2009/05/09(土) 11:36:19 ]
皆さんレスありがとうございます。
インターフェースを揃えてそもそも処理を分けないで済む方法で自己解決しました。
お騒がせしました。

>>806
モジュールの外で継承されることが完全に抜け落ちてました(汗)
自分がやりたかったのは Class.nesting を使ってる方です。
勉強になりました。ありがとうございます。

808 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:27:32 ]
質問

 my/main.rb
 my/mod.rb

というディレクトリ構成で、main.rb に
 require 'mod'
と書いてあるとします

これ、カレントディレクトリがたとえば HOME だったりすると $LOAD_PATH の "." が HOME になって
HOME/mod.rb を探してしまって希望通りに動作しませんよね
「自分が存在するディレクトリにある自分用ファイルを require する」ということをさせたい場合の
決まった書き方はありますか?

809 名前:デフォルトの名無しさん [2009/05/09(土) 15:28:32 ]
require fine.join(__FILE__, $0)



810 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:34:30 ]
>>808
どうするのが定石が知らんが、gemsとかのspecファイルとか見てると、

$:.unshift(File.dirname(__FILE__))

してから、require するか、

require File.join(File.dirname(__FILE__), 'spec_helper.rb')

という感じだな。

811 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:37:35 ]
>>808
わかりやすいとこで

#!/usr/local/bin/ruby -Ku
$LOAD_PATH.unshift(File.dirname(File.expand_path(__FILE__)))
require 'mod'
...

require は引数をフルパスにしても動作保証がなかったはずだし Ruby のめんどくさいとこだな

812 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:42:21 ]
そうそう、ファイルを2つに分けただけなのに $LOAD_PATH とかいじらないと動作しないというのはどうにも
カレントディレクトリをデフォで追加しようとか考えた奴はお花畑だと思う

813 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:45:13 ]
…そこまで言わんでも

1.9 でこっそり追加されてるとかそういうことはないかしら

814 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:55:39 ]
まあ、めんどっちいな
何が面倒かっていうと cron とかそういう絶対パスで動作させるような環境にたまたま持っていったときに
その cron の内部でだけよくわからんエラーになって露見するのが嫌
「っかしーなー動くよなー mod.rb もあるしなー」と(当該ディレクトリ内で相対パスで)スクリプト動かして首捻るわけだ

815 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:03:59 ]
rubyに限ったことじゃないような。

Windowsのソフトでも作業ディレクトリ(カレントディレクトリ)をexeと同じにしないと、
まともに動かないのはザラだからな。
何がいいたいかというと、カレントディレクトリ依存とかはプログラマの仕事でもあり、
そうじゃなかったらユーザーが気を配る話でもある。
(Windowsはショートカットだとカレントディレクトリは最初自動で設定してくれるが、
バッチ処理とか、コマンドラインから起動したりするととたんに>>814みたいなことになるんだよな)

まあ、自動的に解決してくれる言語仕様ならそれにこしたことはないけど。
どんな仕様だったらいいものなのかね?

816 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 18:12:25 ]
Rubyとずれるが、Windowsでゲーム作って公開したときに、
エクスプローラーから実行すると動かないという意味不明な問い合わせがきてだな、
アドレスバーに直接exeのフルパス打ち込むと、カレントディレクトリがアプリのディレクトリと異なるのでうごかない
という現象に遭遇して、
結局、アドホックに"起動直後にexeのディレクトリをカレントディレクトリに設定"などという処理を入れて、
回避したんだよ。

Rubyだったら、最初に起動するスクリプトで

 Dir.chdir(File.dirname(__FILE__))

なんかだせえw

817 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 20:40:33 ]
>>811
> require は引数をフルパスにしても動作保証がなかったはずだし
してるよ。

818 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 21:08:02 ]
1.9ならrequire_relativeってのが有る
ttp://doc.loveruby.net/refm/api/view/method/Kernel/m/require_relative

819 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 21:58:40 ]
作者がウィンドウズ使ってない弊害だろう。リナックス使ってるのだっけか。



820 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:12:14 ]
>require_relative
いつのまにこんな便利メソッドが!

Ruby 1.9.x で追加されたけど、あまり表舞台にあがってないメソッドっていろいろあるよね
CHANGELOGとか見返せば分かるのかな

821 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 22:18:07 ]
rubyにスパイウェア仕込んでメソッドの呼び出し状況を収集して
ruby-lang.orgに送信して使われてないメソッドのプロモーションとかすればいいのに

822 名前:デフォルトの名無しさん [2009/05/09(土) 22:30:06 ]
推奨プラットフォームがLinuxだっけか。

823 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 23:31:32 ]
*Supported* なのは唯一Debianのみ。
Supportedの意味はサイト参照。


824 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:37:26 ]
デビアン使ってない信者は負け組だな。

825 名前:デフォルトの名無しさん [2009/05/10(日) 08:41:33 ]
www.infoq.com/jp/news/2007/09/ruby-shoes
のサンプルコードの一文
l = text "0"
のtextとはどういう意味でしょうか?

826 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:03:25 ]
l = text("0")

メソッド text に引数 "0" を渡してるだけ
スニペットってことはモジュール使用例の一部分だけを抜き出してるからこんな見かけなのだろう

827 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 10:22:26 ]
("0") < オハヨウ!

828 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:00:48 ]
Rubyの場合、コーディングでの改行は必須なのでしょうか?
(言語によっては、改行は実質無視されるものもあります)

例えば、対話環境 irb で
$ irb
irb(main):001:0> print "Hello world\n"
Hello world
=> nil
irb(main):002:0>



$ irb irb(main):001:0> print "Hello world\n" Hello world => nil irb(main):002:0>
と書くのは不可でしょうか?


829 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:03:26 ]
>>828
区切りに改行か ; が必要。

>$ irb irb(main):001:0> print "Hello world\n" Hello world => nil irb(main):002:0>
・・・書かなくていいところまで書くなよw



830 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:40:31 ]
>>828
irbに対するprint1つじゃ改行もへったくれもないぞ 。


831 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 21:53:32 ]
>>828
何の釣りだよw

832 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 12:28:03 ]
>>828
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\

833 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:33:10 ]
ファイルの個数を拡張子ごとに数えるもっとシンプルな書き方ないですか?
exts = v.inject(Hash.new(0)){|r,x| r[x['Path'][/[^\.]+?$/]] += 1; r }

ちなみに、File.extname() を使っていないのはバグがあったからです。


834 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 19:37:40 ]
>>833
なんかイラっとくる。いや俺も初心者だけど。vって何?

835 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:01:54 ]
counts = Hash.new{|h, k| h[k] = 0}
Dir.glob('*').each do |path|
next if File.directory?(path)
counts[File.extname(path)] += 1
end
counts = Hash.new.update(counts)


836 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:02:45 ]
extnameとしてくくり出す以外やること無いと思う

837 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:08:30 ]
バグなら報告すればいいだろ

838 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:11:34 ]
1.8.7以降だとこうも書けるかな
Hash[Dir.entries('.').group_by{|n|File.extname(n)}.map{|k,v|[k,v.size]}]

839 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:11:51 ]
97パーセントくらいまで「ディレクトリを除外しないバグ」だと思う



840 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:17:02 ]
結局>>835が一番シンプルで一番正確な動きをするというRubyらしい結果に


841 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:24:34 ]
まあ人に想像させるというか、空気を読ませる時点で「シンプル」ではないわな。
そういう意味では>>835

842 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:31:55 ]
俺は838の方がいいけどなぁ
ま、人それぞれだな

843 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:43:21 ]
>>838はディレクトリ数えるぞ

844 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:45:06 ]
>exts = v.inject(Hash.new(0)){|r,x| r[x['Path'][/[^\.]+?$/]] += 1; r }
Ruby初心者で疑問なんですが、
injectブロックの|r,x|が何であるかとか、どこでどうやって決めているんですか?
例えばCだと、ヘッダに関数の宣言があってそれを見ればいい訳ですが。


845 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:45:33 ]
というか、each 系ブロックに渡すファイル一覧として Dir.entries を使う時点でけっこうアレだ

846 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:48:20 ]
>>844
vが何であるかで決まる、と思う

847 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:48:44 ]
>>844
ただのブロック用の仮引数(ローカル変数)に過ぎない
each do |引数| で x を使うか e を使うかどうするか程度

848 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:49:25 ]
> injectブロックの|r,x|が何であるかとか、どこでどうやって決めているんですか?

ソースコード的には、yieldに渡す値で決まる。

> 例えばCだと、ヘッダに関数の宣言があってそれを見ればいい訳ですが。

プログラミング時にどうしたらいいか、ということなら、リファレンスマニュアルを見る。

849 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:55:32 ]
foreachの方がいいのかと思ったけどDir.foreachだと別に変数用意してやらなかったりしてショボーン



850 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:21:15 ]
>>844に挑戦しようとして挫折w

a.inject(Hash.new(0)){|r,x| 〜 += 1; r }
のinjectで+=1; rってね。これね。
今まで俺もひたすらこういう書き方してきたけど、
injectにおける; r部分はいつももやもやする。

851 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:39:34 ]
最近のruby-1.9.2 headはsolarisでビルドすると Dir.glob("/**/")で死ぬから困る

852 名前:デフォルトの名無しさん [2009/05/12(火) 05:48:28 ]
(敢えて聞きます)
Rubyの弱点て何ですか? Webで調べても長所しかないので。


853 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 05:52:01 ]
> Webで調べても長所しかないので
そんなあなたには使えそうもないところです

854 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:06:06 ]
てか「Ruby 短所|デメリット」あたりで検索すればウンコみたく出てくると思うんだが

855 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:37:32 ]
今のRuby自体はそれほど問題ないよね
用途に合わない使い方をすると果てしなく糞だというだけで

856 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:45:36 ]
Windowsでは使いづらいことが多い。
ユニコードファイル名でファイルアクセスさせてくれ。

857 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:50:55 ]
用途に合わない使い方をするから…

858 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:51:16 ]
Windows使う奴は情弱

859 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 06:53:13 ]
Windows上でRuby使う奴はアホ
というかrequireが激遅な環境があるのをとっとと改善しろ



860 名前:デフォルトの名無しさん [2009/05/12(火) 07:33:40 ]
プログラマにとっても、posix環境を対象とする方が精神的にいいのかもな。
ライブラリなんかを見てもwinのための特別なコードを目にするし。

861 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 07:39:09 ]
異なるOSを跨ぐソフトはどこもそんなもんだと思う
Linux <=> FreeBSD <=> Solaris もそれなりに汚い

862 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 09:00:24 ]
>>852
858や859のように、Windowsをバカにする人間が一定の割合いることが悪い点
あとは……プリコンパイルができないことぐらいかな

863 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:02:09 ]
windowsをバカにされてムキムキする奴は情報処理から手を引いた方がいいよ

864 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:15:29 ]
CUIからアプローチしたWindowsはヘボいという事実を認められない人はいないほうが平和だったりする

865 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:20:32 ]
WindowsでRuby使う人は言語のためにOS選んでるわけじゃない
逆に特定の言語使うためにプラットフォームを選択しろとか理解しがたい

866 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:31:32 ]
Windows使いたかったらPython行け

867 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 10:46:12 ]
そのへん Java は使いやすいと思う

c:\\ とか c:/ とか書いても動くし、/usr/local/hoge みたいなファイルを開くと、
勝手が c: だったら、c:\usr\local\hoge を開いてくれるし。

868 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 11:34:38 ]
>>867
同じ事できたよ ruby 1.8.6 (2008-03-03 patchlevel 114) [i386-mswin32]

puts File.read('/cygwin/home/myname/test.txt')
#=> テキストの内容が出力される

869 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 11:47:27 ]
>>851
> 最近のruby-1.9.2 headはsolarisでビルドすると Dir.glob("/**/")で死ぬから困る
kwsk



870 名前:852 mailto:sage [2009/05/12(火) 12:59:47 ]
なんかRubyって、Winsowsと相性が悪いみたいですね。
というか、Win7が出るのでさらに混沌とするのかな。


871 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:20:10 ]
でも個人的には、Windows XPでRuby使ってて>>862以外に困ったことはないなー
今はパスの問題だってそうそう起きないし
(Vistaではまた違うのかもしれないが)

>>868
知らなかった……いつから絶対パス指定ができるようになってたんだ

872 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:35:29 ]
>>871
> 知らなかった……いつから絶対パス指定ができるようになってたんだ
大昔からできるよ。
そもそもruby内部で/と\を変換したりしてるわけじゃなくて、元々APIレベルでは
どちらでもアクセスできる。


873 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:41:07 ]
WindowsはPowerShellがあるからな。
Rubyの出番はもうない。

874 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:48:59 ]
kogaidan 「ご愁傷さまです。UNIXなどを知ってしまうと、あまりにムカつくことが多いよ。
タダならともかく、Windowsを使うくらいなら、Mac OS XやUbuntuでもいいんじゃないのかな。」

875 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 15:04:25 ]
PHP を使えば大丈夫

876 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 20:06:11 ]
LinuxのGUIはWindowsのCUIと同じくらいむかつくのは事実

877 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 20:47:02 ]
めんどくさかったので spec から書かずに従来どおりにスクリプト作ったら、
ある時期からスクリプトがどんな構造してるのかさっぱしわからなくなった

878 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:09:17 ]
>>876
LinuxのGUIはWindowsのCUIと同じくらいオマケ機能と思えばどうということはない

879 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:23:16 ]
Fusion楽しめればそれでいい



880 名前:デフォルトの名無しさん [2009/05/12(火) 21:25:46 ]
今日もキューブをまわすお( ^ω^)

881 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:34:26 ]
>>871
> 今はパスの問題だってそうそう起きないし
ファイル名に♥とか特殊な文字が入ってなきゃおきないけど、問題に直面したら現状回避不可能なのは問題だ。
結局このためだけにPython使ったりとか、悲しいじゃないか。

882 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:43:24 ]
というか、なんで Windows で無理して Ruby 使うんだろ。
適材適所という言葉を知らんのじゃないか?

883 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:47:07 ]
かといってPowerShellをわざわざ憶えるのはまんどくせ
Pythonだって別にベストフィットってわけでもなかろうし

884 名前:デフォルトの名無しさん [2009/05/12(火) 21:51:39 ]
だが現役シェルの中でPowerShovelが一番最強!(たぶん・・・)

885 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:52:38 ]
そこでIronPythonですよ

886 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:52:47 ]
Linux なり何なりをメインに使っていて、たまに Windows を使うというのなら、
他の言語を覚えるのは「まんどくせ」なのだろうが、Windows を使う機会の方
が多いんだったら、Ruby 以外を覚えて使ったほうがいいと思うけどね。

887 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:55:47 ]
どのOSでも使えるのがスクリプトのメリットだろ

888 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:57:39 ]

> どのOSでも使えるのがスクリプトのメリットだろ
> どのOSでも使えるのがスクリプトのメリットだろ
> どのOSでも使えるのがスクリプトのメリットだろ
> どのOSでも使えるのがスクリプトのメリットだろ


889 名前:デフォルトの名無しさん [2009/05/12(火) 21:59:15 ]
・・・w



890 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:00:19 ]
そんなメリットは聞いたことがないわ

891 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:01:14 ]
俺、北千住で聞いたことあるよ

892 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:06:14 ]
Windowsしか使わないならVisualBasicがおすすめ
VisualStudio,MS-Office,WSH,etcetc
VBが役に立たない場所は無い
逆にプラットホーム非依存なら日本語の扱いが楽な言語がいい
個人的にはjava,rubyがおすすめ

893 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:09:12 ]
なんでいまさらVB・・・C#でいいじゃん

894 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:11:03 ]
必要があってならともかく無理してまでプラットホーム非依存なんてことを
考える必要なんてないじゃん、という話の流れだと思うけどね。


895 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:11:42 ]
コンパイルやらポリシーやらXMLやらでいきなりやる気90%減

896 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:23:04 ]
なんかくだらない
RubyやPythonやってるのにプラットフォーム気にすること自体ナンセンスだと思う

897 名前:デフォルトの名無しさん [2009/05/12(火) 22:25:16 ]
しかし全くプラットフォームを意識せずにプログラミングできるかというと、そうでもない。

898 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:29:44 ]
どうせ依存しなけらばならないのなら,
より適したものを使おうというのは自然な発想

899 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:44:23 ]
>>882
そりゃLinux文化から生まれた言語だし、Windowsが二の次なのは分かってるよ。でも
> なんで Windows で無理して Ruby 使うんだろ
とか本気で言ってるのか?
WindowsユーザーがRubyを好きで、できるだけ楽しくプログラミングしたいと思うのは
そんなに奇妙なことなのか?



900 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:49:46 ]
本人が好きで楽しいと思ってるんだったら使えばいいんじゃないの?

滝に打たれる苦行を楽しいと思い、喜んでやる人もいるわけで。
そんなのその人の勝手。

その姿を見て、変なやつ、と思い感想を述べるのは見てる人の勝手。

901 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:55:51 ]
compizこそおまけ機能。OSインストールしたら速攻オフだろ、jk

>>899
禿堂

902 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 23:46:05 ]
何故にこの流れの中で compiz?
素でわからん。

903 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 23:47:47 ]
WindowsでRuby使っているが、ファイル名以外はそんなに困らんような…。
(webアプリはテストだけで、デプロイは動かすLinux鯖だったりするし…)

>>899
不用意に煽ってるだけだから、つられなさんな

Linux板とかmac板とか見ればわかるけど、不用意にWindowsユーザーを煽るというか、
何故か選民意識みたいなものがあるみたいなのでスルー推奨

904 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 00:14:16 ]
>>835
いまさらだけどHash#defaultを使って欲しかったので…
path = './'
counts = {}
counts.default = 0
Dir.foreach(path) do |filename|
  counts[$1] += 1 if filename =~ /\.([^.]+?)$/
end
p counts


905 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 06:21:06 ]
教祖がデビアン使いの時点で選民思想だしなあ。
大多数が使ってるウィンドウズは非サポート。
マクは論外。あそこの教祖は癌らしいから余命わずかでしょ。

javaも漢字コードとか環境依存だからなんとも。おらに買収されちゃったし。

906 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 08:00:00 ]
おらって書かれるとオライリーに思える

907 名前:デフォルトの名無しさん [2009/05/13(水) 09:31:48 ]
>>884
www.powershovel.co.jp/

908 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 10:56:57 ]
>>837
> バグなら報告すればいいだろ
redmine.ruby-lang.org/issues/show/1168
これのことかも

909 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 13:33:07 ]
rubyなんて所詮は新興宗教の公用語。
教祖の気まぐれで仕様が変わる。

付き合ってらんねー。



910 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 14:57:37 ]
>>909
公開されてから仕様が追加、修正、廃止されなかった言語ってのを挙げてくれよ
今日中で頼む、知名度の低い言語はカンベンな

911 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:34:14 ]
909 じゃないけど、
Java の JCP や Python の PEP みたいなのあってもいいかもなーと思うときがある。
個人的に Ruby は不要だけど Rails にはほしいかも。

912 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:53:27 ]
RCRというのもあったぞ。
今ならredmine.ruby-lang.org経由で[Feature]かな。

913 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 18:48:08 ]
rspecで「この describe を一時的にテストから外す」ってできない?
重いテストや遅いテストがあって、そこは一旦外しておきたいんだけれども

914 名前:デフォルトの名無しさん [2009/05/13(水) 19:54:45 ]
Rubyは仕様が文書化されておらず、
「ときどき各処理系の開発者がメーリングリストで
まつもとさんに確認している状態」(前田氏)という。
またバグか仕様かはまつもと氏にしか分からないこともあり、
「しかも言ってることが時々変わっている(笑)」という。
前田氏は「ソースコードがドキュメントだ。バグも 完全に記述されている」
というまつもと氏のハッカーらしい発言を引用して苦笑いする。

ttp://www.atmarkit.co.jp/news/200809/11/ruby.html

915 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 21:52:36 ]
>>913
つ pending
と思ったが、example(it)じゃなくてexample group(describe)のほうかぁ。

https://rspec.lighthouseapp.com/projects/5645/tickets/790-add-pending-group-support

まだないみたいだねぇ。


916 名前:デフォルトの名無しさん [2009/05/14(木) 01:08:13 ]
WinXPでruby1.8.6を使っています。

ファイルを開くときの File.open('out.txt', 'w') {|f| の
|f| はどういう意味なのでしょうか?
調べましたが分かりませんでした。


917 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 01:30:07 ]
>>916
ブロックの仮引数。

def callback(f)
のみたいなもん。

918 名前:デフォルトの名無しさん [2009/05/14(木) 02:19:22 ]
>>917
さんきゅう。


919 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 02:28:53 ]
いかん・・・Ageてしまった。




920 名前:デフォルトの名無しさん [2009/05/14(木) 03:43:12 ]
質問です。
Rubyでミリ秒単位の値は得られないのでしょうか?
ttp://www.namaraii.com/rubytips/ などでも秒までです。

0.01秒単位のストップウォッチはRubyでは無理なのでしょうか?


921 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 04:04:25 ]
Time オブジェクトを to_f すればとりあえず用は済むと思われる
irb> Time.now.to_f
1242241404.3147
irb> t = Time.now; puts t.strftime("%Y年%m月%d日 %H時%M分%S秒#{t.usec}")
2009年05月14日 04時03分25秒893515

ただ、ごく一般論としては、スクリプトでミリ秒を計るのはあまり意義のあることではないんじゃないかな

1000.times {|n| print "\r残り時間:%3i/1000"%n; $stdout.flush; sleep 0.01 }


922 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 06:40:42 ]
処理系依存だしなあ。厳密じゃないし。

923 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 08:53:51 ]
かなりどうでもいいんだけども、個々のデータ data の内容を適切にまとめてあるハッシュ results があって、
それに新規の key => value を1ペア追加するてきとーなメソッドを作りたいんよ

def new(data)
 …
 return {key => value}
end

results.update(new(data))



def add_to(h, data)
 …
 h[key] = value
end

add_to(result, data)

ってどっちがフツーっぽいかな

924 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 09:01:06 ]
そもそも

 change_obj(obj, data)

はあまり好きじゃない

 obj = obj + scan_new(data)

の返り値再代入(に準ずるように見える処理)が好みだ
ということで前者おすすめ
キーを指定する形式に比べたら明らかに処理が遅いはずだが気にしたら駄目だ

925 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 09:25:25 ]
resultsをハッシュじゃなくResultsとか新しいクラスにしちゃって
Results#[]=でペア追加するのがRubyっぽい気がする
使うときにはto_hash

926 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 11:45:23 ]
多少のことではそういうことをしなくて済むように組み込みコレクションが機能的なのがRubyのいいとこなんじゃないのか
や、もしかしたらあちこちで使い倒されまくるハッシュでクラスにするのが妥当なのかもしれないが、
普通はハッシュで済むならハッシュのままだろ

927 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 12:45:57 ]
ini.path = "c:/test"
p ini.path

を内部的に
ini.write("settings", "path", "c:/test")
p ini.read("settings", "path")

に置き換えるようなのって出来ますかね。
メソッド名がなかったらコールバック的に呼ばれる機能があったようななかったような。

928 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:25:53 ]
そう動作するように書けばいいじゃん

def path=(s)
 write('settings', 'path', s)
end
def path
 read('settings', 'path')
end


929 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:29:20 ]
> メソッド名がなかったらコールバック的に呼ばれる機能があったようななかったような。

method_missing



930 名前:デフォルトの名無しさん [2009/05/14(木) 13:35:23 ]
WinXPでruby1.8.6を使っています。
文字列中の『:』(コロン)の扱いで質問です。

tag0 = "<parm xmlns="ruby_xyz">\n" を実行したときコロンの箇所で 
 syntax error, unexpected tIDENTIFIER, expecting $end

というエラーが出ます。どうしたらよいでしょうか?
目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。


931 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:43:14 ]
>>921-922
どうも。一応は出来るみたいですね。
ただ、Javaでも他の言語でも、ミリ秒計測は普通にできるものかと思っていましたので。


932 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:50:01 ]
> 文字列中の『:』(コロン)の扱いで質問です。
違います

どの解説にもこれのやり方は載ってるはずなんだが、載ってない解説とかがあったら即晒せ
ダブルクォート「"」を含む文字列を表現するには " の直前に \ を置く

tag0 = "<parm xmlns=\"ruby_xyz\">\n"


933 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:52:55 ]
>>930
初心者らしい質問でなぜか安心した

エスケープしない限り「"」が次に出た所で文字列の終わりとみなされるので
tag0 = "<parm xmlns="ruby_xyz">\n"
と書くと,
tag0 = "<parm xmlns=" ruby_xyz ">\n"
と書いてるのと大差無い

エスケープして書くならこうすればいい
tag0 = "<parm xmlns=\"ruby_xyz\">\n"

「"」をエスケープするのが面倒なら %Q を使って
tag0 = %Q!<parm xmlns="ruby_xyz">\n!
とかも書ける 詳しくはマニュアルなど参照のこと

> 目的はtag0と他の文字列Aを組み合わせてできる文字列Bの生成です。
の意味がよくわからないけど,これで解決しただろうか

934 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:08:03 ]
>>931
言語に関係なくミリ秒の計測はソフトウェア上では正確にはできません
ハードウェアによる直接のサポートがどうしても必要

935 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:14:15 ]
>>932,933
有難うございます。エスケープ文字列の問題だったのですね。
エラーの指摘箇所がコロンのところだったので、てっきりこの文字が原因だと思っていました。


936 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 15:43:30 ]
>>935
エラーメッセージが教えてくれるのは転んだ場所でしかなくて
躓いたりぶつかったりの転ぶ原因は大抵別の場所にある。

遠く離れた場所で怪我してたから転んだなんてこともあるぐらい。
ありがちなのは想定外のオブジェクトに化けているパターン。
obj = ["hello,", "world"]
obj = "!" # 本当は obj << "!"

puts obj.join # ここでNoMethodError

937 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:08:18 ]
文字列処理で質問です(ruby1.8.6)

日付と時刻を文字列化し、その末尾を2桁づつ抽出したいのですが、
片方で4桁になってしまいます。

nowTime = Time.now.strftime("%Y%m%d_%H%M%S") # 現在の日付と時刻
timeLen = nowTime.split(//).size # 上の長さ
value01 = nowTime[timeLen-4, timeLen-3] # nowTimeの末尾4文字目と3文字目 ← ※4桁になる
value02 = nowTime[timeLen-2, timeLen-1] # 同様に1文字目と2文字目
p value01+", "+value02 # 2桁づつで表示 ← 実行すると4桁と2桁

どうすべきでしょうか?


938 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:17:15 ]
『まつもとゆきひろ コードの世界~スーパー・プログラマになる14の掟』

スーパー・プログラマってのが厨臭いなあ。書き下ろしだそうだから買っちゃうかもしれないけど。

939 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:28:51 ]
>>937
そんなんTimeオブジェクトのメソッドで時間とか分とか出せばいいじゃん、というのはとりあえず置いておく
nowTime = Time.now.strftime("%Y%m%d_%H%M%S")
mm = nowTime[-4, 2]
ss = nowTime[-2,2]
puts "#{mm}, #{ss}"




940 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:37:47 ]
>>937
最終的に欲しいのは YYYYMMDD_HHMMSS の中の DDSS なんだよな?
リファレンスマニュアルで Time#strftime とついでに String#size,String#[] を調べてこい

941 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 16:43:54 ]
>>939-940
ゴメンなさーい(泣


942 名前:デフォルトの名無しさん [2009/05/14(木) 18:24:50 ]
>>938
宣伝乙

943 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:44:39 ]
open-uri で each_line のように一行ずつではなく、
取得した内容全部を一気にごそっと変数に入れるにはどうしたらいいでしょうか

944 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:49:24 ]
readで全部読む

945 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 18:51:52 ]
っていうかread以外用途ないよね

946 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:13:36 ]
この質問、よくみるね。
www.ruby-lang.org/ja/man/html/open_uri.html
に書き込める人、サンプルよろしく。

947 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:15:20 ]
サーバ側がchunkedでだらだら送ってくるのをeach_lineでだらだら処理、とか
できるようになって...るんだろうか?

948 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:28:48 ]
>>947



949 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 21:01:35 ]
>>946
そのマニュアル、もう凍結されてるよ
今はるりまに移行してる



950 名前:デフォルトの名無しさん [2009/05/14(木) 22:25:28 ]
>>914
> ドキュメント
> Document

>   matzの苦手なもの。彼は普段から「ソースがドキュメントだ。
>   バグも完全に記述されている」と主張しているが、誰も受け入れない。当り前だ。

・・・w

951 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 07:25:41 ]
>>942
ageてるお前が宣伝マン。

952 名前:デフォルトの名無しさん [2009/05/15(金) 08:02:23 ]
>>951
宣伝乙

953 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:34:05 ]
>>949
Google の検索では凍結されたページが上位に来るのは問題だね。
るりまに転送とかできないのかな。

954 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:34:45 ]
Googleさんに菓子折でも持って行けばやってくれるんじゃね?

955 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:47:06 ]
単純にリダイレクトしたら。

956 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:51:57 ]
ここにいる全員のドキュメント嫌いも相当なものですな

957 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 11:08:32 ]
ソースがドキュメントでテストが仕様書

958 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:00:13 ]
>>953
そういうこと言うとRubyユーザーはHTTPも知らないとか思われそうなのでやめてくれ

959 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:35:24 ]
sinatra で

require 'rubygems'
require 'sinatra'

get '/' do
"hello"
end

とだけの場合、/test や /xxx みたいに定義されていない URL を叩かれるとエラーになるけど、
その場合は「ページが存在しないよ」と出すにはどうしたらいいでしょうか。




960 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:36:26 ]
>>959
これぐらい見ろよw
www.sinatrarb.com/intro.html

961 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:25:23 ]
>>959

Not Found

When a Sinatra::NotFound exception is raised, or the response’s status code is 404, the not_found handler is invoked:

not_found do
'This is nowhere to be found'
end

とあるね。

962 名前:デフォルトの名無しさん [2009/05/15(金) 16:29:18 ]
WinXPでruby1.8.6を使っています。
一定間隔で動作するオシレーターはどう書けばよいのでしょうか?

調べましたが差分を求める説明が見つからず、下記の記述も未だ理解できないレベルです。
ttp://archive.mag2.com/0000267290/20080803070000000.html

単純に、例えば3秒間隔で「3sec」と出力されるものを先ず作りたいと思っています。
よろしく願います。


963 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:38:08 ]
>>962
そのリンク先の
>○シンプルタイマー(ソースコード)
がほぼそのまんま答えなんだけどな。

というか「作りたいと思っています」なら、動かないものでいいからコード書いてみ。
添削はするし、わからない部分は具体的に聞いてくれれば答えるから。
ちなみに4行で書ける。

964 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:49:05 ]
>>962
猫のモフモフ・・・

965 名前:962 mailto:sage [2009/05/15(金) 17:08:54 ]
>>963
レス有難うございます。
直後に時刻のエポック秒変換の記述を手元の本で見つけましたので
なんとか動作するコードは書けました(下記)。

# OSC01.rb
count = 0
time0 = Time.now.to_i
while true
if time0 +3 == Time.now.to_i
puts "3sec"
time0 = Time.now.to_i
count+=1
end
#
if count>10
break # 11回以上でwhileループをBreak
end
end

・・・明らかに4行は超えてますw


966 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 17:21:23 ]
>>965
何回で止めるっていう条件が出てなかったしね。
while
sleep 3
puts "3sec"
end

ちなみに分岐が一文だけならこういう書き方もできることを覚えておいて。
break if count > 10


967 名前:962&965 mailto:sage [2009/05/15(金) 17:32:02 ]
>>966
有難うございます。
sleepってメソッドだったのですね。


968 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 19:43:00 ]
>>956
書くのも読むのも好きですが何か

969 名前:デフォルトの名無しさん [2009/05/15(金) 19:58:36 ]
CRubyがMRIだから松本さんが開発されたのかと思ったのですが、
検索でトップにくるのはGCを作成している方です。
Rubyの開発とはGCを開発することなのでしょうか?



970 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:03:02 ]
最近の言語全般で強ち間違ってないような気もするが、多分そういう話でもないんだろうな

971 名前:デフォルトの名無しさん [2009/05/15(金) 20:09:51 ]
loop {break if count > 10}

上にあるこういう書き方ってRuby的にどうなの?
Integer#timesを使わない理由って何?

972 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:16:29 ]
countが不規則に増えるとか

973 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:19:12 ]
初心者の書いたコードになに嫌味つけてんのw

974 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:26:07 ]
>>971
よう初心者

975 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:26:08 ]
>>969
マジレスすると、一般的にCRubyとは言わず、単にrubyと呼ぶことの方が多いからそうなる

976 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:27:08 ]
モノ教えるのに幾許かでも慣れてないとこういう時困るよな

977 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:32:11 ]
まあ少子化だしな

関係ねえか

978 名前:デフォルトの名無しさん [2009/05/15(金) 20:38:50 ]
>>966 == >>973 == >>974
よう初心者!

979 名前:デフォルトの名無しさん [2009/05/15(金) 20:59:28 ]
すみませんでした。



980 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:59:52 ]
めんどくせえ

>>1-1000
よう初心者!!

981 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:02:24 ]
次スレ立てろよカス

982 名前:デフォルトの名無しさん [2009/05/16(土) 04:43:41 ]
ruby1.8.6です。
ファイルアクセスが他のソフトとぶつかる場合で質問です。

Rubyで周期的にXMLファイルを上書きしていますが、この上書きのタイミングと
他のソフトによるXML読み込みが衝突した場合(と思われる時)、
 in 'initialize': Permission denied - new XML.xml (Errno::EACCES)

というエラーメッセージが出ます。
そこでRubyの振る舞いとして、他のソフトがファイルアクセス中は上書きを延期するか、
あるいは別の方法で衝突を回避したく思います。
何か良い方法はありますでしょうか?

なお別のソフト側で衝突回避を試みましたが、上手くいかないためRubyに望みを
託すことにしました。


983 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 04:59:41 ]
Rubyあんま関係ないな
ファイルロック(またはロックファイル)でぐぐれ

たいていの場合両方のソフトが対応してないといけないが、
たいていの場合相手のソフトはそんなもん作ってない

なお、直接

 File.open(path,'w'){|f| f.write(data)}

するのではなく

 File.open(path_v,'w'){|f| f.write(data)}
 File.rename(path_v, path)

と、ファイル移動をOS任せにしたほうがファイル書き込みアクセス衝突の可能性自体は減る
ただし、これだと rename でファイルを掴むまでに起こったディスク上の変更を検知できない

このへんの衝突可能性に気を遣ってるソフトはあらゆる永続的データ保存に「別名保存→名前変更」のプロセスを使ってるので
そのソフトの使ってる別名保存名がわかればもしかしたらロックファイルのように使えるかもしれない

984 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:47:20 ]
Rubyで次のコードが何故かできません。
超初心者です。

codepad.org/BEAGq3lE


985 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:54:12 ]
>>984
Rubyに関するまとまった初心者向けの解説サイトまたは書籍を通読しろ
単に基礎知識が足りない

986 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:57:09 ]
わかりました。ありがとうございます。

987 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 09:57:16 ]
Rubyだけに関する知識じゃなくて、
もっと一般的にプログラミングで使用される基礎的な概念に関する知識だな。


988 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:03:46 ]
>>984
グローバル変数は $x と書く。

989 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:11:32 ]
Ruby 初心者スレッド Part 28
pc12.2ch.net/test/read.cgi/tech/1242436010/




990 名前:デフォルトの名無しさん [2009/05/16(土) 10:13:56 ]
999

991 名前:デフォルトの名無しさん [2009/05/16(土) 10:15:22 ]
1000!

992 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 10:57:49 ]
いやそこまでギリギリじゃないから

993 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 11:17:41 ]
あれw
1000!にだまされた

994 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 13:57:06 ]
1000なら今年Ruby2.0

995 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:02:46 ]
こんなスローなスレでそんなことしてもw

996 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:08:34 ]
1000ならRubyは俺のもの

997 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:15:50 ]
エッチでリッチなかーちゃん、Rubyをせしめてフランスへ。

998 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 14:38:42 ]
とうきょう ルビルビ リズム ルビルビ
心ズキズキわくわくー

999 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 16:00:01 ]
>>1000なら今のシステムをSinatraで置き換える



1000 名前:デフォルトの名無しさん [2009/05/16(土) 16:02:22 ]
10^3

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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