Ruby 初心者スレッド Part 30
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/08/08(土) 08:21:23★注意★ 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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0782デフォルトの名無しさん
2009/09/09(水) 23:55:43http://www.ruby-lang.org/ja/documentation/
とそのリンク先は見た?
0783781
2009/09/10(木) 00:50:23ありがとうございます。
そのドキュメントは見ましたが、文法の解説という感じなので自分が求めてるものと少し違いました。
言語が違いますがたとえばhttp://java.sun.com/j2se/1.5.0/ja/docs/ja/api/のように、
各クラスにどんなメソッドとフィールドがあって各メソッドの引数は何か、というのが一目で分かるようなAPI的なものを探しています。
0784デフォルトの名無しさん
2009/09/10(木) 00:55:42ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFA5AFA5E9A5B9A1BFA5E2A5B8A5E5A1BCA5EBA1BFCEE3B3B0A5AFA5E9A5B9.html
ttp://www.ruby-lang.org/ja/man/html/_C5BAC9D5A5E9A5A4A5D6A5E9A5EA.html
0785デフォルトの名無しさん
2009/09/10(木) 01:02:58何を言ってるんだおまえは
http://doc.okkez.net/static/187/library/_builtin.html
0786デフォルトの名無しさん
2009/09/10(木) 01:05:470787デフォルトの名無しさん
2009/09/10(木) 01:18:470788デフォルトの名無しさん
2009/09/10(木) 02:03:14配列とハッシュしかみあたらないのですが。。。
0789デフォルトの名無しさん
2009/09/10(木) 02:05:35体裁が gem の rdoc に一番近いのはここの Core API のところかなあ
http://www.ruby-doc.org/
書籍だと内容的にはちと古いがピッケル本のライブラリ編とか
0790デフォルトの名無しさん
2009/09/10(木) 02:15:16Arrayでおk
0791デフォルトの名無しさん
2009/09/10(木) 02:30:57連結リストを何に使うの?
キューやスタックなら配列で十分だぞ(#shift, #unshift, #push, #pop)
Lispの処理系を作るとかいう話なら自分で作るべき
0792デフォルトの名無しさん
2009/09/10(木) 04:25:14str.scan(/../n)
Nが毎回可変なら>>780
0793デフォルトの名無しさん
2009/09/10(木) 06:01:015文字を2文字ずつとかしたとき余った文字って捨てていいの
0794デフォルトの名無しさん
2009/09/10(木) 07:05:14/../n の、n オプションって何?調べたけど見つからない
>>793
str.scan(/..?/)
Nが正の整数で可変なら、
r = '.' + ('.?' * (N-1))
str.scan(Regexp.new(r))
でいける?
うーん。正規表現よくわからん。
0795デフォルトの名無しさん
2009/09/10(木) 07:05:58端数出ないと仮定してもよさそうだが
require 'enumerator'
"12345".split(//n).each_slice(2).to_a.map{|a| a.join}
["12", "34", "5"]
0796デフォルトの名無しさん
2009/09/10(木) 07:22:47> Ruby は日本語化されているので、$KCODE の値に従って正規表現中の日本語文字を正しく扱います。
> $KCODE = "n" の場合、日本語文字を一切認識せずにバイト列として扱います。これはデフォルトの動作です。
> オプションとして n, e, s, u のいずれかを指定することで
> 正規表現の文字コードを $KCODE の値に関係なく個々の正規表現リテラルに指定することもできます。
irb> $KCODE = 'u'
irb> p 'うんこ'.split(//)
["う", "ん", "こ"]
irb> p 'うんこ'.split(//n)
["\343", "\201", "\206", "\343", "\202", "\223", "\343", "\201", "\223"]
文字列が完全にASCIIの範疇しか使われないならぶっちゃけいらない
ASCII 文字の処理だからと n をつけまくってる人は時々見るが、つけないほうがいい時のほうが多いと思うんだ
0797デフォルトの名無しさん
2009/09/10(木) 07:28:24文字コードの指定ですか
1.9以降はどうなるんだろ
0798デフォルトの名無しさん
2009/09/10(木) 07:43:01irb1.9> p "しふとじす".encode('Shift_JIS').split(//)
["??", "??", "??", "??", "??"]
irb1.9> p "しふとじす".encode('Shift_JIS').split(//).map{|e| e.encode('UTF-8')}
["し", "ふ", "と", "じ", "す"]
split(//n) と同じことをするのはやや手間
irb1.9> p "しふとじす".encode('Shift_JIS').dup.force_encoding('BINARY').split(//)
["\x82", "\xB5", "\x82", "\xD3", "\x82", "\xC6", "\x82", "\xB6", "\x82", "\xB7"]
each_byte の結果を文字列にしたほうがたぶん妥当
あるいはなんか凄い人が凄い簡単な手法見せてくれるかもしれない
0799デフォルトの名無しさん
2009/09/10(木) 07:46:43N = 2
'abcde'.scan(Regexp.new('.{1,%d}' % N))
=> ["ab", "cd", "e"]
0800デフォルトの名無しさん
2009/09/10(木) 09:44:20「そのメソッドからの $stdout への出力」というのを限定して取れないことに気づいた
$stdout を曲げてる期間に他の何かからも $stdout に出力があれば混じってしまう
や、「テスト中にはそんなこと起こらない」ということにすればいいんだけども
0801デフォルトの名無しさん
2009/09/10(木) 10:03:31class MatcherDisplay
def initialize(expected); @expected = expected; end
def matches?(proc)
old = $stdout.dup; out = StringIO.new
$stdout = out; proc.call; $stdout = old
out.rewind
@actual = out.read
return (@actual == @expected)
end
def failure_message
"expected stdout is #{@expected.inspect} but was #{@actual.inspect}"
end
def negative_failure_message
"stdout #{@expected.inspect} should not be same"
end
end
def display(expected)
MatcherDisplay.new(expected)
end
end
describe "Test" do
include MyCustomMatchers
it "say hello" do
lambda{print "hello!"}.should display('hello!')
end
end
0802デフォルトの名無しさん
2009/09/10(木) 10:08:20そのへん適当に
あとメッセージも適当
failure_message が should が失敗したときのメッセージ
negative_failure_message が should_not が失敗したときのメッセージ
モジュール作って include 形式にはしなくても構わないがこうしたほうがきっとあとで楽
0803デフォルトの名無しさん
2009/09/10(木) 11:01:01>何を言ってるんだおまえは
おまえこそ何を言っているんだ。
Ruby初心者では、782で紹介されたページから、ライブラリのドキュメントまでたどり着けないことがあるという事実がわかったんだから、
初心者でも簡単にたどり着けるようなページデザインにするにはどうしたらいいかを話し合ったほうが建設的ではないか?
たとえば
ttp://doc.okkez.net/static/188/doc/index.html
のページを見ると、言語仕様の目次がずらーっと並んでいて、ライブラリのドキュメントへのリンクは後ろのほうにあるだけ。
これだと、>>783のような勘違いが生まれても仕方ない。
そうじゃなくて、このページから目次をなくして、
「言語仕様」「組み込みライブラリ」「標準添付ライブラリ」「その他」
の4つの大きなアイコンが並んでいるだけにすれば、>>783のような勘違いもなくなると思うんだけど、どうだろうか。
・・・という感じで、初心者が必要なドキュメントにたどり着けるようにするにはどうしたらいいかを話し合ってほしい。
せっかくの初心者スレだし。
0804デフォルトの名無しさん
2009/09/10(木) 11:22:14そこはサイトを作ってる奴が○○○ので仕方ないかと。
いいじゃん、ruby-doc.orgの英語ドキュメント充実してるんだから、そこを見れば。
0805デフォルトの名無しさん
2009/09/10(木) 11:39:19こんなチラ裏掲示板で話し合っても全く建設的ではありません。
プロジェクトに提案があるならメーリングリストへ。
0806デフォルトの名無しさん
2009/09/10(木) 12:17:33unpack("C*").map(&:chr)
0807デフォルトの名無しさん
2009/09/10(木) 12:18:13でも回答があったにも関わらず目に付いた部分しか見ずに探そうとしない>>783ようなのはただのバカだろ
バカの世話までしていたらキリがない
0808デフォルトの名無しさん
2009/09/10(木) 12:20:260809デフォルトの名無しさん
2009/09/10(木) 12:33:10テストで標準出力奪うのはやめといたほうが…
テスト自体の出力が混ざるぞ
0810デフォルトの名無しさん
2009/09/10(木) 12:43:02おう、今まさに混じってるぞ
何が辛いってうっかりメソッド側で p とかしてオブジェクトの中身確かめようとしたら
標準出力に p の結果が混じってテストが失敗すること
warn obj.inspect で逃げてるが display マッチャのコンセプト自体が間違ってたとしか思えん(w
0811デフォルトの名無しさん
2009/09/10(木) 13:22:41BioRubyを入れるとString#stepが拡張されて
require 'bio'
'abcdef'.step(2){|a| puts a}
ab
cd
ef
とできる。割り切れなければ最後に余りが返ってくる。
まあ、これだけのために使うようなライブラリじゃないし、
マルチバイト文字も使えないけど。
0812デフォルトの名無しさん
2009/09/10(木) 14:05:36ここだから書き込むやつがいるんじゃないか
わざわざメーリングリストに入って発言なんかするかよ
どうせたいした議論なんかしないんだから。
0813デフォルトの名無しさん
2009/09/10(木) 14:11:51それを無視しているメーリングリストの人たちのほうが非建設的
0814デフォルトの名無しさん
2009/09/10(木) 14:13:27うわぁ
0815デフォルトの名無しさん
2009/09/10(木) 14:16:070816デフォルトの名無しさん
2009/09/10(木) 14:25:25おれには理解できんが
0817デフォルトの名無しさん
2009/09/10(木) 14:48:21refe というリファレンサもあることは知ってるけど使ったことないや。
使ってる人いる? インストールめんどくせ、というイメージなんだが
0818デフォルトの名無しさん
2009/09/10(木) 14:54:17refe使ってるけど、アーカイブを展開してパス通すだけじゃね?
0819デフォルトの名無しさん
2009/09/10(木) 15:42:14相当するようなライブラリはないでしょうか?
0820デフォルトの名無しさん
2009/09/10(木) 15:51:250821デフォルトの名無しさん
2009/09/10(木) 16:04:16http://jp.rubyist.net/magazine/?0002-WEBrickProxy
http://doc.okkez.net/static/187/class/WEBrick=3a=3aHTTPProxyServer.html
通信後へのフックしか用意されてないようだから、これを基に手を加える必要がありそう
0822デフォルトの名無しさん
2009/09/10(木) 16:23:060823デフォルトの名無しさん
2009/09/10(木) 16:43:140824デフォルトの名無しさん
2009/09/10(木) 17:39:42newgemで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:260826デフォルトの名無しさん
2009/09/10(木) 17:43:12要は出力対象を差し替え可能にしておけってことじゃね
class C
def initialize(out = $stdout)
@out = out
end
def exec
@out.print "message"
end
end
0827デフォルトの名無しさん
2009/09/10(木) 17:57:11Wgetクラスとか作っちゃうのもセンスないよね
system("wget #{url}")するよりはマシだけどね
0828デフォルトの名無しさん
2009/09/10(木) 18:01:04OptParserの練習にもなっていいんだぞ、多分
0829デフォルトの名無しさん
2009/09/10(木) 18:02:300830デフォルトの名無しさん
2009/09/10(木) 18:38:19respond 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:05http://doc.okkez.net/static/187/method/Object/i/respond_to=3f.html
0832デフォルトの名無しさん
2009/09/10(木) 18:50:55ありがとうございます!なるほどrespond_toメソッドのことでしたか。
ruby(というかプログラミング)特有の言い回しは慣れないと難しいですね。。
0833デフォルトの名無しさん
2009/09/10(木) 18:57:01def 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:11DRYしたくて、この場合、どのような書いたものでしょうか?
例えば、以下のような感じにしたいのですが、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:02Item.find(params[:id]).__send__(method)
0837デフォルトの名無しさん
2009/09/11(金) 00:00:270838デフォルトの名無しさん
2009/09/11(金) 01:08:11いけますね
Item.find(params[:id]).send(method)
ではダメなんで書馬、
0839デフォルトの名無しさん
2009/09/11(金) 01:20:39Object#__send__は原則として書き換えてはいけない
Object#sendは上書きされることが予想(許容)される
http://doc.okkez.net/static/187/class/Object.html
>send が再定義された場合に備えて別名 __send__ も用意されており、ライブラリではこちらを使うべきです。また __send__ は再定義すべきではありません。
じゃあsendはなんで存在するのかというと・・・俺も聞きたいw
0840デフォルトの名無しさん
2009/09/11(金) 01:26:07class 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:49nbspな書き込みが多かったから2ch側で自動的に置き換えてくれるようになったのか、
と思ったけど違ったみたいだ
0843デフォルトの名無しさん
2009/09/11(金) 05:30:26再定義のないプレーンな状態では send が使えてしかるべき
object_id と __id__ の関係に近い
個人的には __class__ もあってしかるべきだったと思うのだが
あんま __ つきメソッド作ると Python ぽく動作しなければならない気分になるかも
0844デフォルトの名無しさん
2009/09/11(金) 05:32:33navi2ch は文頭から始まるスペースを に書き換える
本来はやってはいけないことなんだがまあそれはそれで
0845デフォルトの名無しさん
2009/09/11(金) 05:35:48RubyのThreadでの引数の役割りって、何ですか?
(どういう場面で役立つのか分からない)
関数なら y = f(x) で引数xを元にyが決定されプロット
できますが、Threadも左右されるのでしょうか?
すいません、ググっても分かりませんでした。
0846デフォルトの名無しさん
2009/09/11(金) 06:19:04という話ではなさそうだな
Thread.new の引数の話なら、これはそのまんまだ
説明読んで実際に動かしてみてわからんのなら、きっとまだ早い
1ヵ月後くらいに再読すると結構わかるので今は諦めれ
0847833
2009/09/11(金) 06:34:05ありがとうございます。
本当だ、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インライン要素に囲まれた空白文字は空白として保存する、みたいな仕様になっていれば
今ごろ世界中ハッピーだったと思うんだ
0850デフォルトの名無しさん
2009/09/11(金) 09:10:15RailsだけじゃなくてSocket#sendなんてのもあるしな
0851833
2009/09/11(金) 09:34:56あー、ほんとうだ。
Railsのsend(ActiveRecord)と、Socket#sendは全然意図が違いますね。
前者はフックして処理追加みたいな感じですが(superよんでるし)、
後者は、__send__関係ねえw
上の方で教えていただいた事柄は、後者のことですね、たぶん。
別の意味のsendが定義されてる場合、__send__よべと。そりゃそうだ。
Railsの場合は、むしろ、sendとしてsendが呼ばれるのを期待しているみたいなので、
__send__直接でなく、sendを呼んでやらないととおかしなことになりますね。
0852デフォルトの名無しさん
2009/09/11(金) 09:39:130853デフォルトの名無しさん
2009/09/11(金) 11:26:06bar = Foo::Bar.new
baz = (bar.class + Class.new('Baz')).new
p baz.class #=> Foo::Bar::Baz
eval するしかないとしたら、なにかより安全な方法はありますか?
0854デフォルトの名無しさん
2009/09/11(金) 11:43:37Foo::Barのスコープ下に可変な名前の新クラスを定義したいという意味?
0855デフォルトの名無しさん
2009/09/11(金) 11:47:59できね
文字列としてクラス名を適当に作ってからevalしろ
定数になる書式しか受け取らないevalはあれば楽しいが多分無い
0856デフォルトの名無しさん
2009/09/11(金) 11:49:54new_class_name = 'Baz'
Foo::Bar.const_set(new_class_name, Class.new)
0857デフォルトの名無しさん
2009/09/11(金) 15:36:36○HogeはFooの内部クラス
○HogeはFooの内部モジュール
○HogeはFooで定義された定数
のいずれかと思っていれば間違いないでしょうか?
ドキュメントを見て自分で調べた限りではこのような使われ方がされているようです。
継承したクラスや、インクルードしたモジュールなどは、Hoge::Fooのような書き方をしていないようなのですが、継承・インクルード用の表記法はあるのでしょうか?
0858デフォルトの名無しさん
2009/09/11(金) 15:42:06というのもクラスもモジュールも、ClassインスタンスやModuleインスタンスが定数に代入されているだけに過ぎないから
継承はC < Object
モジュールにお約束はないと思うけど、リファレンスでは継承と同じように書いてるね
C < Enumerable < Object
0859845
2009/09/11(金) 15:50:03レスどうも。
理解の助けになるようなサンプルがググっても見つかりません。
(手元の本のサンプルはやたら行数が多いし)
適当なサンプルコードってありますか?
0860857
2009/09/11(金) 15:52:25ありがとうございます。すっきりしました。
モジュールのインクルードもHoge::Moduleと書きたくなっちゃうけど違うんですね。
公式HP見たら、ご指摘どおり、Array < Enumerable < Object < Kernelとなってました。
Java厨の自分にはObject < Kernelはとっても違和感がw
0861デフォルトの名無しさん
2009/09/11(金) 15:56:46x = 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:14x = 1; t = Thread.new{ sleep 1; p x }; x += 1; t.join #=> 2
0863デフォルトの名無しさん
2009/09/11(金) 16:00:41公式のどこ?その書き方おかしいだろ
モジュールは何個でもincludeできるから一つの流れでObjectまで辿り着けるわけじゃないし
0864デフォルトの名無しさん
2009/09/11(金) 16:07:39http://doc.okkez.net/static/187/class/Array.html
p Array.ancestors #=> [Array, Enumerable, Object, Kernel]
いくつでもincludeはできるけど、優先順位はきっちり存在する
0865デフォルトの名無しさん
2009/09/11(金) 16:16:07p String.ancestors #=> [String, Enumerable, Comparable, Object, Kernel]
矛盾してるぞ
0866デフォルトの名無しさん
2009/09/11(金) 16:22:560867デフォルトの名無しさん
2009/09/11(金) 16:26:59あまり階層を意識しないでとりあえず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:20OpenURIにPOST機能をつけた場合
module OpenURIPost
require 'open-uri-post'
これがフツーだと思う
というか、require名はハイフンになるようにライブラリ作れというお達しがどっかに…
0870デフォルトの名無しさん
2009/09/11(金) 17:59:10その中ならhogeextかhoge-extかな
個人的にはこっちのほうが良いと思う
require 'hoge/ext'
0871デフォルトの名無しさん
2009/09/11(金) 18:07:41いや、見栄えもいいのはわかるんだが
本家 hoge の下に foo とか bar とかあった場合ちょっと微妙に
0872デフォルトの名無しさん
2009/09/11(金) 18:35:19挿入してそこに指定モジュールからメソッドを追加する感じ(てきとう)。
別のモジュールのincludeではその結果出来る階層にさらに別のダミー
クラスを挿入するので、内部的にはモジュール(ダミークラス)が線形に
階層を成している。
ドキュメントにそれを意識して反映してるかはシラネ。
0873デフォルトの名無しさん
2009/09/11(金) 18:49:21require 'hoge/plus' とかそういうのにすれば違和感が
0874デフォルトの名無しさん
2009/09/11(金) 18:57:17ruby script/generate scaffold book title:string author:string
これでbooksテーブルを作成するmigrationファイルが出来るのは分かるのですが、
NOT NULL制約やstringの長さの制限などを指定することはできないでしょうか?
generate scaffoldでテーブルを作ると全てのカラムでNULL可、文字列は255文字になってしまいます。
仕方なく、作成されたmigrateファイルを修正することで対応していますが、これは正しいやり方でしょうか?
0875デフォルトの名無しさん
2009/09/11(金) 19:15:40WebProg板のなら、最終投稿10日だし、別に過疎ってないと思う。
やりかたはそれでOK
全くカラム情報を与えずに作って空のmigrationに一から手で書いても
構わない。
そもそもmodelのgenerator templateの中身は
t.<%= attribute.type %> :<%= attribute.name %>
だし。
0876874
2009/09/11(金) 19:37:46http://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単なるネストした配列だ
ということで、ネストしてるだけなのでネストしてnewする
a = Array.new(2).map{Array.new(3).map{Array.new(4, 0)}}
0879デフォルトの名無しさん
2009/09/11(金) 19:53:46open("010.pdf", "r") do |f|
f.gets
end
pdfファイルを読み込むには何か正しい方法があるのでしょうか。
最初はpdftotextでtextファイルに変換してから読み込もうと思ったのですが、
pdftotextを使う方法が分からなかったので直接読み込む方法を探しています。
環境はwindowsです。よろしくお願いします。
0880デフォルトの名無しさん
2009/09/11(金) 19:58:51というかそのエディタで開くということと同じことしかしてないわけだが
0881デフォルトの名無しさん
2009/09/11(金) 20:01:55そのへんの説明はあるはずなんだが
とりあえず gets ではどうにもならんと思うんで
素直に read してその pdftotext なりなんなりで解析してもらえ
0882デフォルトの名無しさん
2009/09/11(金) 20:04:48> 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] だったりとサイズも次元も可変なのです。
■ このスレッドは過去ログ倉庫に格納されています