2017-10-31 13 views
0

以下のような状況で、Prawnブロックの@inst変数にアクセスできないのはなぜですか?インスタンス変数でインスタンス変数が使用できない

呼び出し:。PdfGen.new(「研」)

class PdfGen 
@class = "class" 

    def initialize(inst) 
    @inst = inst 
    end 

    def build 
    @inst #=> 'inst' 
    Prawn::Document.generate() do 
     @inst #=> nil 
     @class #=> 'class' 
    end 
    end 

end 
+1

あなたが試したこと、起こりそうなこと、実際に起こったことを含めてください。つまり、コードをコピー&ペーストして 'PdfGen.new( 'foo')。build'を実行すると、あなたの[generate call]をフォーマットしていないので例外が発生します(http://prawnpdf.org/docs/ 0.11.1/Prawn/Document.html#method-c-generate)を正しく入力してください。 – anothermh

答えて

2

を構築Prawn::Document.generate()は、それ自身のスコープ内のコードブロックを評価するようにそれはあなたのオブジェクトのスコープが異なる、(例えば#instance_evalメソッドを介して)いるようです。

このブロックにputs classを印刷して証明できます。これはあなたに何が起こっているのかを示す)

+0

こんにちはそれはまさにそれです。 'def初期化(&ブロック)' 'ブロックの場合 ' ' block.arity <1? instance_eval(&block):ブロック[self] ' ' end' 'end' – apt

関連する問題