はじめまして正木といいます。分からないことがあるので教えてください。 その前に BigNum の Bug らしきものを見付けたので報告しておきます。 p 19605335450%3308059755 #=> -1229930621 p -1229930621%3308059755 #=> 5227900106 (version 1.6.2) 以下質問です。 次のような class class Sequence def initialize(list,*para) @list=list @para=para @proc=eval("proc{"+yield+"}") end def [](n) @list[n] || @list[n]=@proc.call(n,*@para) end 途中省略... def find @list.find{|x| yield x} || (r=nil;each{|x| if yield(x) then r=x;break;end};r) end end を定義して Factorial=Sequence.new([1]){"|n| n*self[n-1]"} Prime=Sequence.new([2,3]){"|n| (m=self[n-1]+2;m+=2 while self.find{|k| break i f k*k>m; m%k==0};m)"} def (Power={}).[](x) super || Power[x]=Sequence.new([1],x){"|n,x| x*self[n-1]"} end def Exp(x);(Power[x]/Factorial).sum{|x| x>$error};end の様に使っています。 上の例では block の中を文字列で与えていますが、本当は block を直接 Sequence.new([1],x){|n,x| x*self[n-1]} の様に渡せるはずだと思って、色々試したのですがうまく行かないので 教えてください。単純に initialize の @proc を @proc=proc{instance_eval(&proc)} に変えただけでは駄目なようです。 block 引数の受渡しがうまく行きません。 (instance_eval に block を与えた時の振舞がよく分からないので どなたか解説してください。) @proc=eval("proc",binding) としてみても self は main のままです。 block を文字列で受け取る方法があれば一番簡単なんですが そういうmethodはありますか? 以上よろしくお願いします。