6

煮詰めると、基本的に次のような Sinatra アプリがあります。

class MyApp < Sinatra::Base

  configure :production do
    myConfigVar = read_config_file()
  end

  configure :development do
    myConfigVar = read_config_file()
  end

  def read_config_file()
    # interpret a config file
  end

end

残念ながら、これは機能しません。私は得るundefined method read_config_file for MyApp:Class (NoMethodError)

のロジックはread_config_file自明ではないため、両方で複製したくありません。両方の構成ブロックから呼び出すことができるメソッドを定義するにはどうすればよいですか? それとも、この問題に完全に間違った方法でアプローチしているだけですか?

4

2 に答える 2

5

configureファイルが読み込まれるとブロックが実行されるようです。configure ブロックの前にメソッドの定義を移動し、それをクラス メソッドに変換するだけです。

class MyApp < Sinatra::Base

  def self.read_config_file()
    # interpret a config file
  end

  configure :production do
    myConfigVar = self.read_config_file()
  end

  configure :development do
    myConfigVar = self.read_config_file()
  end

end
于 2012-04-05T02:55:10.887 に答える
0

クラス定義が評価されると、構成ブロックが実行されます。したがって、コンテキストはインスタンスではなく、クラスそのものです。したがって、インスタンス メソッドではなく、クラス メソッドが必要です。

def self.read_config_file

それはうまくいくはずです。テストしていませんが。;)

于 2012-04-05T02:36:48.570 に答える