2009-04-17 8 views
0

これは私が話している簡単なテストRuby Shoesプログラムです:class Hello < Shoesのようなサブクラス構文を使用して自分のプログラムを実行しようとすると、 '未定義メソッドpara'または 'undefined method stack'というエラーが発生します。もちろん、Shoesをサブクラス化することはできないので、 'para'や 'stack'メソッドについては何も知らない。しかし、それはShoes app do....のように、私がShoes.appにブロックとして渡すとうまく動作します。私はどのようにしてShoesでサブクラス化できますか?

何が問題なのですか?

答えて

2

は、あなたがこのような何かをしようとしている、私は推測してみましょう:

class MyClass < Shoes 

    stack :width => 200 do 
    subtitle 'People who like ponies' 
    para 'TheTXI' 
    para 'Pesto' 
    para 'Einstein' 
    end 

    stack :width => -200 do 
    subtitle 'People who hate ponies' 
    para 'Hitler' 
    para 'Stalin' 
    para 'Einstein (He was bipolar)' 
    end 
end 

まあ、もちろん、これは動作しません。 parastacksubtitleなどはすべてインスタンスメソッドですが、それらをクラスメソッドとして呼び出そうとしています。彼らはこのように、インスタンスメソッド内でなければならない:

class MyClass < Shoes 
    url '/', :pony_list 

    def pony_list 
    stack :width => 200 do 
     subtitle 'People who like ponies' 
     para 'TheTXI' 
     para 'Pesto' 
     para 'Einstein' 
     end 

     stack :width => -200 do 
     subtitle 'People who hate ponies' 
     para 'Hitler' 
     para 'Stalin' 
     para 'Einstein (He was bipolar)' 
     end 
    end 
    end 

    Shoes.app :width => 400 

は、そのものが、今pony_list方法であるかを参照してください?もちろん、メソッドを呼び出す必要があります。どうすればそれをすることができますか?だから私たちはurlメソッド(これはparaとは異なり、実際にはクラスメソッドです)と呼ばれています。これは、pony_listメソッドを呼び出すデフォルトのURLを設定します。あなたがクラス定義の後にShoes.appを呼び出さなければならないことを忘れないでください。あなたはすべて設定されています。

+0

それでした。説明ありがとう。私は何か愚かなことをしなければならないことを知っている。 'Nobody Knows Shoes'の例では、アプリを複数のページに分割する際にurlメソッドを使用する方法について説明していますが、私のようにurlメソッドを使用する必要があるかどうかはわかりませんでした。私はShoesクラスをサブクラス化する(そして、para、stackなどのメソッドを使用する)必要があるように見えます。 –

関連する問題