トップページ⇒tech
1001コメント342KB

Ruby 初心者スレッド Part 30

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2009/08/08(土) 08:21:23
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
 なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0804デフォルトの名無しさん2009/09/10(木) 11:22:14
>>803
そこはサイトを作ってる奴が○○○ので仕方ないかと。

いいじゃん、ruby-doc.orgの英語ドキュメント充実してるんだから、そこを見れば。
0805デフォルトの名無しさん2009/09/10(木) 11:39:19
> 初心者でも簡単にたどり着けるようなページデザインにするにはどうしたらいいかを話し合ったほうが建設的ではないか?

こんなチラ裏掲示板で話し合っても全く建設的ではありません。

プロジェクトに提案があるならメーリングリストへ。
0806デフォルトの名無しさん2009/09/10(木) 12:17:33
>>798
unpack("C*").map(&:chr)
0807デフォルトの名無しさん2009/09/10(木) 12:18:13
>>781の時点で見つけられないのはわからないでもない
でも回答があったにも関わらず目に付いた部分しか見ずに探そうとしない>>783ようなのはただのバカだろ
バカの世話までしていたらキリがない
0808デフォルトの名無しさん2009/09/10(木) 12:20:26
each_byteのほうが短かった
0809デフォルトの名無しさん2009/09/10(木) 12:33:10
>>802
テストで標準出力奪うのはやめといたほうが…
テスト自体の出力が混ざるぞ
0810デフォルトの名無しさん2009/09/10(木) 12:43:02
>>809
おう、今まさに混じってるぞ
何が辛いってうっかりメソッド側で p とかしてオブジェクトの中身確かめようとしたら
標準出力に p の結果が混じってテストが失敗すること

warn obj.inspect で逃げてるが display マッチャのコンセプト自体が間違ってたとしか思えん(w
0811デフォルトの名無しさん2009/09/10(木) 13:22:41
>>779
BioRubyを入れるとString#stepが拡張されて
require 'bio'
'abcdef'.step(2){|a| puts a}
ab
cd
ef
とできる。割り切れなければ最後に余りが返ってくる。
まあ、これだけのために使うようなライブラリじゃないし、
マルチバイト文字も使えないけど。
0812デフォルトの名無しさん2009/09/10(木) 14:05:36
>>805
ここだから書き込むやつがいるんじゃないか
わざわざメーリングリストに入って発言なんかするかよ
どうせたいした議論なんかしないんだから。
0813デフォルトの名無しさん2009/09/10(木) 14:11:51
現状このチラ裏でいろいろ書かれているわけだから
それを無視しているメーリングリストの人たちのほうが非建設的
0814デフォルトの名無しさん2009/09/10(木) 14:13:27
>>813
うわぁ
0815デフォルトの名無しさん2009/09/10(木) 14:16:07
本買えばいいじゃんとしか思わない
0816デフォルトの名無しさん2009/09/10(木) 14:25:25
本なんて邪道と思ってるやつもいるからな
おれには理解できんが
0817デフォルトの名無しさん2009/09/10(木) 14:48:21
ri にキャッシュ機能を付加したフロントエンドを被せるとそこそこ快適

refe というリファレンサもあることは知ってるけど使ったことないや。
使ってる人いる? インストールめんどくせ、というイメージなんだが
0818デフォルトの名無しさん2009/09/10(木) 14:54:17
>>817
refe使ってるけど、アーカイブを展開してパス通すだけじゃね?
0819デフォルトの名無しさん2009/09/10(木) 15:42:14
RubyでHTTP caching proxyを作ろうと思うのですが、PerlのHTTP::Proxyに
相当するようなライブラリはないでしょうか?
0820デフォルトの名無しさん2009/09/10(木) 15:51:25
webrickにhttpproxyというのがあるけど、希望に沿えてるかはわからない
0821デフォルトの名無しさん2009/09/10(木) 16:04:16
>>819-820
http://jp.rubyist.net/magazine/?0002-WEBrickProxy
http://doc.okkez.net/static/187/class/WEBrick=3a=3aHTTPProxyServer.html
通信後へのフックしか用意されてないようだから、これを基に手を加える必要がありそう
0822デフォルトの名無しさん2009/09/10(木) 16:23:06
rubyのMLってオナニーメールばかりで気持ち悪い
0823デフォルトの名無しさん2009/09/10(木) 16:43:14
日本語のは、メール自体が少ないから
0824デフォルトの名無しさん2009/09/10(木) 17:39:42
>>772
newgemでbinつき、rspecつきで出力したのが参考になるかも

binのスクリプトのスペックファイルがこんなのになってる
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
require 'tweetswget/cli'

describe Tweetswget::CLI, "execute" do
 before(:each) do
  @stdout_io = StringIO.new
  Tweetswget::CLI.execute(@stdout_io, [])
  @stdout_io.rewind
  @stdout = @stdout_io.read
 end
 
 it "should print default output" do
  @stdout.should =~ /To update this executable/
 end
end
0825デフォルトの名無しさん2009/09/10(木) 17:40:26
あらアプリ名でちゃった。はずかすぃ!
0826デフォルトの名無しさん2009/09/10(木) 17:43:12
>>824
要は出力対象を差し替え可能にしておけってことじゃね

class C
 def initialize(out = $stdout)
  @out = out
 end
 def exec
  @out.print "message"
 end
end
0827デフォルトの名無しさん2009/09/10(木) 17:57:11
どうでもいいけど○○wgetとかwget○○とかってセンスないよね
Wgetクラスとか作っちゃうのもセンスないよね
system("wget #{url}")するよりはマシだけどね
0828デフォルトの名無しさん2009/09/10(木) 18:01:04
ほぼ全員が作ったことがある黒歴史っぽい感じでセンス無くて恥ずかしいよな
OptParserの練習にもなっていいんだぞ、多分
0829デフォルトの名無しさん2009/09/10(木) 18:02:30
センスっていう言葉を使う奴って語彙が乏しいよね
0830デフォルトの名無しさん2009/09/10(木) 18:38:19
open-uri.rbに記述されてる説明なんだけど、誰か訳してもらえませんか。
respond toの意味するところが分かりません。

makes possible to open various resources including URIs.
If the first argument respond to 'open' method,
the method is called with the rest arguments.
0831デフォルトの名無しさん2009/09/10(木) 18:43:05
>>830
http://doc.okkez.net/static/187/method/Object/i/respond_to=3f.html
0832デフォルトの名無しさん2009/09/10(木) 18:50:55
>>831
ありがとうございます!なるほどrespond_toメソッドのことでしたか。
ruby(というかプログラミング)特有の言い回しは慣れないと難しいですね。。
0833デフォルトの名無しさん2009/09/10(木) 18:57:01
下記のような、Item.find(params[:id]).hogehoge という部分だけが違うメソッドがあります。

  def move_lower
   Item.find(params[:id]).move_lower
   
   flash[:notice] = '並びかえました。'
   respond_to do |format|
    format.html { redirect_to :action => 'index' }
    format.xml { head :ok }
   end
  end

  def move_higher
   Item.find(params[:id]).move_higher
   
   flash[:notice] = '並びかえました。'
   respond_to do |format|
    format.html { redirect_to :action => 'index' }
    format.xml { head :ok }
   end
  end

  def move_to_bottom
   :
  def move_to_top
   :

(うつく)
0834デフォルトの名無しさん2009/09/10(木) 19:01:56
メソッドのことっていうか、組み込みクラスの名前はそれなりに練られているし
ドキュメント書く人もある程度従うから、メソッド一覧が辞書的・用語的に使える場合があるという感じ

というわけだからその部分は「第一引数がopenメソッドに応答するなら」で、いわゆるduck typing
http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
0835デフォルトの名無しさん2009/09/10(木) 19:12:11
(うつき)

DRYしたくて、この場合、どのような書いたものでしょうか?
例えば、以下のような感じにしたいのですが、Item.find(params[:id]).methodのところがうまく行きません (´・ω・`)

  def move_lower
   do_move(:move_lower)
  end
  def move_higher
   do_move(:move_higher)
  end
  def move_to_bottom
   do_move(:move_to_bottom)
  end
  def move_to_top
   do_move(:move_to_top)
  end

  def do_move(method)
   Item.find(params[:id]).method # ←?????
   
   flash[:notice] = '並びかえました。'
   respond_to do |format|
    format.html { redirect_to :action => 'index' }
    format.xml { head :ok }
   end
  end
0836デフォルトの名無しさん2009/09/10(木) 19:17:02
>>835
Item.find(params[:id]).__send__(method)
0837デフォルトの名無しさん2009/09/11(金) 00:00:27
あまりDRYに見えない気が。
0838デフォルトの名無しさん2009/09/11(金) 01:08:11
>>836
いけますね

Item.find(params[:id]).send(method)
ではダメなんで書馬、
0839デフォルトの名無しさん2009/09/11(金) 01:20:39
>>838
Object#__send__は原則として書き換えてはいけない
Object#sendは上書きされることが予想(許容)される

http://doc.okkez.net/static/187/class/Object.html
>send が再定義された場合に備えて別名 __send__ も用意されており、ライブラリではこちらを使うべきです。また __send__ は再定義すべきではありません。

じゃあsendはなんで存在するのかというと・・・俺も聞きたいw
0840デフォルトの名無しさん2009/09/11(金) 01:26:07
微妙に書き方間違えた、Object由来の__send__とsendの話
class C
 def send; end # Cの都合に合わせたsendに書き換えてOK
 # def __send__; end # __send__の再定義はマナー的にNG
end

Itemの中身は(ほぼ)間違いなくObject由来のオブジェクトだからsendも__send__も使えるけど
sendが再定義されたクラスの可能性もあるから
Object#sendの機能が使いたいなら__send__のほうが確実ということ
0841デフォルトの名無しさん2009/09/11(金) 02:52:17
ごめんちょっとテスト
-スペース×2
 -全角スペース
 - 
0842デフォルトの名無しさん2009/09/11(金) 03:05:49
失礼しました
nbspな書き込みが多かったから2ch側で自動的に置き換えてくれるようになったのか、
と思ったけど違ったみたいだ
0843デフォルトの名無しさん2009/09/11(金) 05:30:26
send は利用専用
再定義のないプレーンな状態では send が使えてしかるべき
object_id と __id__ の関係に近い

個人的には __class__ もあってしかるべきだったと思うのだが
あんま __ つきメソッド作ると Python ぽく動作しなければならない気分になるかも
0844デフォルトの名無しさん2009/09/11(金) 05:32:33
>>842
navi2ch は文頭から始まるスペースを   に書き換える
本来はやってはいけないことなんだがまあそれはそれで
0845デフォルトの名無しさん2009/09/11(金) 05:35:48
目茶初心者的な質問です。

RubyのThreadでの引数の役割りって、何ですか?
(どういう場面で役立つのか分からない)

関数なら y = f(x) で引数xを元にyが決定されプロット
できますが、Threadも左右されるのでしょうか?

すいません、ググっても分かりませんでした。
0846デフォルトの名無しさん2009/09/11(金) 06:19:04
引数なんだからルーチン実行に必要な明示的外部因子だろ
という話ではなさそうだな

Thread.new の引数の話なら、これはそのまんまだ
説明読んで実際に動かしてみてわからんのなら、きっとまだ早い
1ヵ月後くらいに再読すると結構わかるので今は諦めれ
08478332009/09/11(金) 06:34:05
>>836-843
ありがとうございます。
本当だ、Railsだとsend上書きしてたりしますね。

ちょっとした使い分けですね。上書きされるような挙動を許したければsend、
そうでないなら、__send__

使ってみます。ありがとうございました。
0848デフォルトの名無しさん2009/09/11(金) 06:44:42
メッセンジャー機能として上書きするために残ってるんじゃないぞ

「送る」メソッドとして名称が被ってもいいように __send__ がある
たとえばメール用ライブラリでは送信用のメソッドがどう考えても send になるが、
そういうクラスで send を作っても元の send の機能が失われないように __send__ がある
他の Object のメソッドはまあ上書きで消えちゃっても仕方ないかなあと思えるものが多いが、
send の機能だけは特別
この機能が使えない状態のクラスは Ruby としてヤバい
0849デフォルトの名無しさん2009/09/11(金) 06:56:46
>>844
インライン要素に囲まれた空白文字は空白として保存する、みたいな仕様になっていれば
今ごろ世界中ハッピーだったと思うんだ
0850デフォルトの名無しさん2009/09/11(金) 09:10:15
>>847-848
RailsだけじゃなくてSocket#sendなんてのもあるしな
08518332009/09/11(金) 09:34:56
>>850
あー、ほんとうだ。
Railsのsend(ActiveRecord)と、Socket#sendは全然意図が違いますね。

前者はフックして処理追加みたいな感じですが(superよんでるし)、
後者は、__send__関係ねえw
上の方で教えていただいた事柄は、後者のことですね、たぶん。

別の意味のsendが定義されてる場合、__send__よべと。そりゃそうだ。
Railsの場合は、むしろ、sendとしてsendが呼ばれるのを期待しているみたいなので、
__send__直接でなく、sendを呼んでやらないととおかしなことになりますね。
0852デフォルトの名無しさん2009/09/11(金) 09:39:13
ソケットにrecvとsendがなかったらアルェーってなるだろう
0853デフォルトの名無しさん2009/09/11(金) 11:26:06
class クラスのインスタンスを「足し算」することはできませんか?

bar = Foo::Bar.new
baz = (bar.class + Class.new('Baz')).new
p baz.class #=> Foo::Bar::Baz

eval するしかないとしたら、なにかより安全な方法はありますか?
0854デフォルトの名無しさん2009/09/11(金) 11:43:37
何がしたいかわからん。
Foo::Barのスコープ下に可変な名前の新クラスを定義したいという意味?
0855デフォルトの名無しさん2009/09/11(金) 11:47:59
>>853
できね
文字列としてクラス名を適当に作ってからevalしろ
定数になる書式しか受け取らないevalはあれば楽しいが多分無い
0856デフォルトの名無しさん2009/09/11(金) 11:49:54
>>854の意味なら
new_class_name = 'Baz'
Foo::Bar.const_set(new_class_name, Class.new)
0857デフォルトの名無しさん2009/09/11(金) 15:36:36
ドキュメント表記でFoo::Hogeと書かれている場合のFooとHogeの関係は、

○HogeはFooの内部クラス
○HogeはFooの内部モジュール
○HogeはFooで定義された定数

のいずれかと思っていれば間違いないでしょうか?
ドキュメントを見て自分で調べた限りではこのような使われ方がされているようです。
継承したクラスや、インクルードしたモジュールなどは、Hoge::Fooのような書き方をしていないようなのですが、継承・インクルード用の表記法はあるのでしょうか?
0858デフォルトの名無しさん2009/09/11(金) 15:42:06
意味的にはそれであってる、実装的には三つ目に集約される
というのもクラスもモジュールも、ClassインスタンスやModuleインスタンスが定数に代入されているだけに過ぎないから

継承はC < Object
モジュールにお約束はないと思うけど、リファレンスでは継承と同じように書いてるね
C < Enumerable < Object
08598452009/09/11(金) 15:50:03
>>846
レスどうも。
理解の助けになるようなサンプルがググっても見つかりません。
(手元の本のサンプルはやたら行数が多いし)

適当なサンプルコードってありますか?
08608572009/09/11(金) 15:52:25
>>858
ありがとうございます。すっきりしました。
モジュールのインクルードもHoge::Moduleと書きたくなっちゃうけど違うんですね。
公式HP見たら、ご指摘どおり、Array < Enumerable < Object < Kernelとなってました。
Java厨の自分にはObject < Kernelはとっても違和感がw
0861デフォルトの名無しさん2009/09/11(金) 15:56:46
>>859
x = 1; t = Thread.new(x){ sleep 1; p x }; x += 1; t.join #=> 2
x = 1; t = Thread.new(x){|y| sleep 1; p y }; x += 1; t.join #=> 1
こういう話?
0862デフォルトの名無しさん2009/09/11(金) 15:58:14
一個目まちがえた
x = 1; t = Thread.new{ sleep 1; p x }; x += 1; t.join #=> 2
0863デフォルトの名無しさん2009/09/11(金) 16:00:41
>>860
公式のどこ?その書き方おかしいだろ
モジュールは何個でもincludeできるから一つの流れでObjectまで辿り着けるわけじゃないし
0864デフォルトの名無しさん2009/09/11(金) 16:07:39
>>863
http://doc.okkez.net/static/187/class/Array.html

p Array.ancestors #=> [Array, Enumerable, Object, Kernel]
いくつでもincludeはできるけど、優先順位はきっちり存在する
0865デフォルトの名無しさん2009/09/11(金) 16:16:07
String < Comparable < Enumerable < Object < Kernel
p String.ancestors #=> [String, Enumerable, Comparable, Object, Kernel]

矛盾してるぞ
0866デフォルトの名無しさん2009/09/11(金) 16:22:56
それは知らん、書いたヤツに聞いてくれw
0867デフォルトの名無しさん2009/09/11(金) 16:26:59
Comparable < Enumerableはさすがに意味不明だね。無関係のモジュール同士だし。
あまり階層を意識しないでとりあえずincludeしてるモジュールが分かればいいって程度の表記なんじゃない?
0868デフォルトの名無しさん2009/09/11(金) 17:12:56
ライブラリの「ファイル名の区切り」ってハイフンとアンダースコアとキャメルケースのどれがいい?
既存のHogeというライブラリがあって、それの非公式エクステンションぽい感じなんだけど

require 'hoge-ext'
require 'hoge_ext'
require 'hogeext'
require 'hogeExt'

どれになるのがそれっぽいかな
0869デフォルトの名無しさん2009/09/11(金) 17:18:20
>>868
OpenURIにPOST機能をつけた場合

module OpenURIPost
require 'open-uri-post'

これがフツーだと思う
というか、require名はハイフンになるようにライブラリ作れというお達しがどっかに…
0870デフォルトの名無しさん2009/09/11(金) 17:59:10
>>868
その中ならhogeextかhoge-extかな
個人的にはこっちのほうが良いと思う

require 'hoge/ext'
0871デフォルトの名無しさん2009/09/11(金) 18:07:41
本家でもないのにディレクトリ切るとな

いや、見栄えもいいのはわかるんだが
本家 hoge の下に foo とか bar とかあった場合ちょっと微妙に
0872デフォルトの名無しさん2009/09/11(金) 18:35:19
実装上は、includeはスーパークラスと自クラスの間にダミーのクラスを
挿入してそこに指定モジュールからメソッドを追加する感じ(てきとう)。
別のモジュールのincludeではその結果出来る階層にさらに別のダミー
クラスを挿入するので、内部的にはモジュール(ダミークラス)が線形に
階層を成している。

ドキュメントにそれを意識して反映してるかはシラネ。
0873デフォルトの名無しさん2009/09/11(金) 18:49:21
ext という別途存在して見慣れてるディレクトリ名なのがよくない

require 'hoge/plus' とかそういうのにすれば違和感が
0874デフォルトの名無しさん2009/09/11(金) 18:57:17
Railsのスレが過疎ってるのでこちらで質問させてください。
ruby script/generate scaffold book title:string author:string
これでbooksテーブルを作成するmigrationファイルが出来るのは分かるのですが、
NOT NULL制約やstringの長さの制限などを指定することはできないでしょうか?
generate scaffoldでテーブルを作ると全てのカラムでNULL可、文字列は255文字になってしまいます。

仕方なく、作成されたmigrateファイルを修正することで対応していますが、これは正しいやり方でしょうか?
0875デフォルトの名無しさん2009/09/11(金) 19:15:40
>>874
WebProg板のなら、最終投稿10日だし、別に過疎ってないと思う。

やりかたはそれでOK
全くカラム情報を与えずに作って空のmigrationに一から手で書いても
構わない。

そもそもmodelのgenerator templateの中身は
t.<%= attribute.type %> :<%= attribute.name %>
だし。
08768742009/09/11(金) 19:37:46
>>875
http://pc12.2ch.net/test/read.cgi/tech/1216829388/このスレのことを言いました。
WebProg板の存在は知りませんでした。誘導ありがとうございます。次からはそちらで質問します。

migrationに手を加えるやり方でよかったのですね。railsの精神に反する気がして少し躊躇してました。
ありがとうございました。
0877デフォルトの名無しさん2009/09/11(金) 19:43:18
任意次元の多次元配列を初期化するには、どう書くのがスマート
でしょうか?

たとえば

size = [2, 3, 4]

というサイズ指定配列を渡されたら、

a = Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}

と等価なことをしたいです。
0878デフォルトの名無しさん2009/09/11(金) 19:50:04
Rubyには多次元配列は存在しない
単なるネストした配列だ

ということで、ネストしてるだけなのでネストしてnewする
a = Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}
0879デフォルトの名無しさん2009/09/11(金) 19:53:46
pdfファイルを読み込み表示させようと思って以下のコードを書いたのですがうまくいきません。

open("010.pdf", "r") do |f|
f.gets
end

pdfファイルを読み込むには何か正しい方法があるのでしょうか。
最初はpdftotextでtextファイルに変換してから読み込もうと思ったのですが、
pdftotextを使う方法が分からなかったので直接読み込む方法を探しています。

環境はwindowsです。よろしくお願いします。
0880デフォルトの名無しさん2009/09/11(金) 19:58:51
PDFファイルをテキストエディタで直接開いてみるとなんかわかるかも
というかそのエディタで開くということと同じことしかしてないわけだが
0881デフォルトの名無しさん2009/09/11(金) 20:01:55
Windows なら open は r ではなく rb だろ
そのへんの説明はあるはずなんだが

とりあえず gets ではどうにもならんと思うんで
素直に read してその pdftotext なりなんなりで解析してもらえ
0882デフォルトの名無しさん2009/09/11(金) 20:04:48
>>878
> a = Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}

それじゃダメなので質問してるんですが。

size が必ず [2, 3, 4] と指定されるのでしたら

def foo(size)
return Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}
end

で OK なんでしょうけど、渡される size は [5, 4, 3, 2] だったり
[2, 3, 4, 5, 6, 7] だったりとサイズも次元も可変なのです。
0883デフォルトの名無しさん2009/09/11(金) 20:09:19
本当にWindowsは糞だな。
Mac OSX最新版のSnow Loepardなら
テキスト、画像、動画、PDF、MS Officeをプラグインなしで統一的に扱えるのに。
0884デフォルトの名無しさん2009/09/11(金) 20:12:26
>>882
Rubyの配列に次元は存在しない
お帰りください
0885デフォルトの名無しさん2009/09/11(金) 20:26:18
rubyのコレクションフレームワークって配列とハッシュしかないの?
0886デフォルトの名無しさん2009/09/11(金) 20:27:16
def make_nested_array(*sizes)
  case sizes.size
  when 0
    []
  when 1
    Array.new(sizes[0], 0)
  else
    Array.new(sizes[0]){
      make_nested_array(*sizes[1..-1])
    }
  end
end
0887デフォルトの名無しさん2009/09/11(金) 20:36:09
>>885
Stack、ListはArrayで間に合うだろう。
Queueは、優先度が付かないならArrayを使え。
このへんは大クラス主義。

標準では、他にSetが付いてくるが、組み込みではないので要require。
Treeは標準にはない。
0888デフォルトの名無しさん2009/09/11(金) 20:37:35
>>883
Rubyで? すごいねー
0889デフォルトの名無しさん2009/09/11(金) 20:54:07
>>886
なるほど。
*size を size に替えてうまく動きました。
ありがとうございました!
0890デフォルトの名無しさん2009/09/11(金) 21:17:37
>>880
テキストエディタで開くと文字化け?してしまいます。

>>881
pdftotext.exeは実行ファイルなのですが、Rubyのスクリプトから使用する方法が分かりません。
何度も申し訳ないのですが、教えて頂けないでしょうか。。
0891デフォルトの名無しさん2009/09/11(金) 21:22:12
`pdftotext hoge.pdf`?
0892デフォルトの名無しさん2009/09/11(金) 21:22:58
>>889
横からだけど
make_nested_array([2, 3, 4])
よりは
make_nested_array(2, 3, 4)
のほうが素直というかRuby的だと思う

ary = [2, 3, 4]
で渡された時のことを考えているんだろうけど
make_nested_array(*ary)
とやれば引数を展開できる

>>890
pdftotext.exeは知らないけど、コンソールでできることなら大抵system関数でできる
コマンドラインを関数に渡せばいい
0893デフォルトの名無しさん2009/09/11(金) 21:53:15
system関数でできました。本当にありがとうございました!
0894デフォルトの名無しさん2009/09/11(金) 22:00:33
rubyでpdfを作るにはどうすればいいですか?
0895デフォルトの名無しさん2009/09/11(金) 22:03:58
>>894
ruby pdfでググると色々出てくるので好きに選べばいいじゃない
0896デフォルトの名無しさん2009/09/12(土) 07:51:58
>>894
ぶっちゃけ、基本ただのテキストファイル。仕様どおりに作ればいい。

適当に一部分だけgzipかけてみたりフォント埋め込んでみたり暗号化してみたり
してる部分もあるが、それは全部付加的なものだし。

現実的には、>>895。RubyならHaruでいいんじゃね?
0897デフォルトの名無しさん2009/09/12(土) 08:33:37
>>879
ハイハイ、マルチポスト、マルチポスト

Rubyでpdfファイルを読み込む方法 -OKWave
http://okwave.jp/qa5281984.html

こっちで、解決したらあっちのも答え書いとけよ
0898デフォルトの名無しさん2009/09/12(土) 09:15:54
RubyでPDFをgrepできたら便利だな
簡単にできるのならやってみようかな
0899デフォルトの名無しさん2009/09/12(土) 09:35:10
PDFを読んでるわけじゃないぞ
PDFをプレーンテキストにする外部プログラムにファイルを渡して
標準入力から受け取って文字列にしてるだけ
0900デフォルトの名無しさん2009/09/12(土) 15:15:55
中括弧 { } を付けても付けなくても同じ結果になるのですが、これらに違いはあるのでしょうか?

def hoge arg
p arg
end

hoge( :a => 1, :b => 2 ) #=> {:a=>1, :b=>2}
hoge( {:a => 1, :b => 2} ) #=> {:a=>1, :b=>2}
0901デフォルトの名無しさん2009/09/12(土) 15:24:48
>>900の場合は同じ意味。

{}はHashを意味している。
メソッド引数の最後のものがHashである場合に限り、{}を省いてよい。
0902デフォルトの名無しさん2009/09/12(土) 15:28:06
>>901
そうなんですか。
�d
0903デフォルトの名無しさん2009/09/12(土) 16:44:49
rubyとpythonはどっちが強いですか?
レス数が900を超えています。1000を超えると表示できなくなるよ。