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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0755デフォルトの名無しさん
2009/09/08(火) 08:24:37Kernel#__send__(文字列 or シンボル, 引数...)
Method#call(引数...)
UnboundMethodをbindして#call(引数...)
など。
0756デフォルトの名無しさん
2009/09/08(火) 08:40:35Object#method # >>755の真ん中の奴
def func ; puts 'func' ; end
func_ref = method(:func)
func_ref.call
0757デフォルトの名無しさん
2009/09/08(火) 09:07:43サンクス
0758デフォルトの名無しさん
2009/09/08(火) 09:33:53--disable-pthreadでconfigureするかどうかってこと?
意味ないからどっちでも同じ結果になるよ。
0759デフォルトの名無しさん
2009/09/08(火) 12:04:10サンクス
そうするとstruct timespecが二重定義って怒られるのはどうしよう
0760デフォルトの名無しさん
2009/09/08(火) 15:12:36redmineで報告すればいいんじゃないかな。
0761デフォルトの名無しさん
2009/09/09(水) 13:16:210762デフォルトの名無しさん
2009/09/09(水) 13:41:05いきなり書いた一行の文って、どう考えればいいの?
Cで言うmain関数みたいなのに暗黙のうちになってるとか、
Javaで言うmainメソッドみたいなのに暗黙のうちになってるとか、
・・・どう解釈したらいいのだ?
0763デフォルトの名無しさん
2009/09/09(水) 13:51:50$ jeweler --rspec hogeeee
create .gitignore
create Rakefile
create LICENSE
create README.rdoc
create .document
create lib
create lib/hogeeee.rb
create spec
create spec/spec_helper.rb
create spec/hogeeee_spec.rb
Jeweler has prepared your gem in hogeeee
$ ls hogeeee/
LICENSE README.rdoc Rakefile lib spec
0764デフォルトの名無しさん
2009/09/09(水) 13:59:55http://i.loveruby.net/ja/rhg/book/minimum.html
コンテキストとしてのself とか main とか
0765デフォルトの名無しさん
2009/09/09(水) 14:01:25トップレベルにも self として参照できるオブジェクトがある。
ほとんど単に Object.new したものだが、文字列化すると main
と返すようになっている点だけちょっと違う。
puts self
#=> main
p self
#=> main
puts self.class
#=> Object
0766デフォルトの名無しさん
2009/09/09(水) 14:07:31これ知ったとき、spec_helper をどっかの rubygem からコピペして
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
を全ファイルの先頭に自力で書いてた俺超涙目
0767デフォルトの名無しさん
2009/09/09(水) 15:20:22rspec でチェックすることはできませんか?
0768デフォルトの名無しさん
2009/09/09(水) 15:36:33putsを呼ぶ時点のselfにspecからアクセスできるなら
ソレ.should_receive(:puts).with(出力)
などで可能だと思う。
0769デフォルトの名無しさん
2009/09/09(水) 15:38:36$stdout = StringIO.new
で溜め込むとか
0770デフォルトの名無しさん
2009/09/09(水) 16:12:05「メソッド内部」と断ってるし普通アクセスできないと思う
0771デフォルトの名無しさん
2009/09/09(水) 16:43:30class Greeter
def hello(name)
puts "hello, #{name}"
end
end
このような位置のputsはspecで
@greeter.should_receive(:puts).with('guest')
でテストできるけど、さらに奥深くだと無理だろうってことね。
0772デフォルトの名無しさん
2009/09/09(水) 17:01:10汎用的なのは$stdoutねじ曲げる>>769か
これ使ったことあるけど、なんかrspecで書いてる気がしないんだよな
stdout マッチャとか display マッチャとか作るべき
0773デフォルトの名無しさん
2009/09/09(水) 17:18:540774デフォルトの名無しさん
2009/09/09(水) 17:21:07こんな感じ?
Proc オブジェクト使うのはこれはこれで微妙に不評なんだよね
0775デフォルトの名無しさん
2009/09/09(水) 17:51:58ジュエラーか。ジュエリストのほうがかっこいいな。
最近ご無沙汰なんだが、hoeとかnewgemはもう古いの?
0776デフォルトの名無しさん
2009/09/09(水) 18:10:420777デフォルトの名無しさん
2009/09/09(水) 18:55:17配布物を使う人には無用のものだと思っていたのだけど、
なんで依存しているgemがあるんだろう、という疑問。
0778777
2009/09/09(水) 18:59:06作者がadd_development_dependencyを知らないだけなのかな。
0779デフォルトの名無しさん
2009/09/09(水) 22:29:32たとえば 'abcdef' を2文字ずつに分解して ["ab", "cd", "ef"] のようにします。
よろしくお願いします。
0780デフォルトの名無しさん
2009/09/09(水) 22:37:38'abcdef'.scan(Regexp.new('.{%d}' % N))
0781デフォルトの名無しさん
2009/09/09(水) 23:44:39公式HPを見ましたが、Rubyの文法を簡単に説明しているだけで、標準ライブラリの細かい仕様を調べたい時などには役に立たないと感じました。
たとえばgemにインストールしたライブラリであればgem serverコマンドでRDocリファレンスが見れますが、標準ライブラリのRDocのようなものは無いのでしょうか?
バージョンは1.8でも1.9でも構いません。よろしくお願いします。
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はあれば楽しいが多分無い
■ このスレッドは過去ログ倉庫に格納されています