0

RoR初心者です。コードを実行するための小さな関数を持つ小さなアプリケーションを ruby​​ で作成しました。

例えば

 def abc(xyz)
    some code
 end

 def ghi(xyz)
    some code
 end

 def jkl(output)
    some code
 end

 xyz = abc[ARGV(0)]
 output = ghi(xyz)
 puts jkl(output)

ここで、コマンド プロンプトで ruby​​ .rb を使用してこのコードを実行すると、適切に実行され、目的の結果が返されます。しかし、クラスを作成してこのコード全体を追加しようとすると、たとえば

 class Foo
     def abc(xyz)
    some code
 end

 def ghi(xyz)
    some code
 end

 def jkl(output)
    some code
 end

 xyz = abc[ARGV(0)]
 output = ghi(xyz)
 puts jkl(output)
 end

「Foo:Class の未定義メソッド 'abc' (NoMethodError)」のようなエラーが生成されます 。

私が聞きたいのは、このコードをクラスにどのように追加すれば、よりプラグ可能になり、目的の結果が得られるかということだけです。

前もって感謝します。

4

1 に答える 1

2

これが書かれているように、これらはすべてインスタンスメソッドです。これら 2 つの例のようにクラス メソッドにする必要があります。または、そのままにしてクラスのインスタンスを作成することもできます。いずれにせよ、おそらく最後の 3 つのステートメントをクラス定義の外に移動する必要があります。

class Foo
  class << self
    def abc(xyz)
      some code
    end

    def ghi(xyz)
      some code
    end

    def jkl(output)
      some code
    end
  end
end
xyz = Foo.abc('something')
output = Foo.ghi(xyz)
puts Foo.jkl(output)

また....

class Foo
  def self.abc(xyz)
    some code
  end

  def self.ghi(xyz)
    some code
  end

  def self.jkl(output)
    some code
  end
end
xyz = Foo.abc('something')
output = Foo.ghi(xyz)
puts Foo.jkl(output)

編集:コメントで質問に答えるには、これがクラスをインスタンス化し、インスタンスメソッドを使用して呼び出す方法です。

class Foo
  def abc(xyz)
    some code
  end

  def ghi(xyz)
    some code
  end

  def jkl(output)
    some code
  end
end
bar = Foo.new
xyz = bar.abc('something')
output = bar.ghi(xyz)
puts bar.jkl(output)

Ruby の学習教材をまだお持ちでない場合は、Chris Pine のチュートリアルを参照してください。クラスとその仕組みに関するセクションが含まれています。書籍に関しては、こちらはRuby 全般に関する優れた書籍であり、こちらは Rails に関する書籍に関する質問です。Rails に深く入り込む前に、Ruby を十分に理解することをお勧めします。

于 2012-05-25T06:05:04.083 に答える