-1

:: [' または '.' を予期して、予期しない構文エラー ' n' と言い続けます。および構文エラーの予期しないkeyword_ensureは入力の終わりを予期しています。私のコードの問題は何ですか?

require 'rubygems'
require 'rubygame'

class
      def initialize
             @screen = Rubygame::Screen.new [640, 480], 0, [Rubygame::HWSURFACE, Rubygame::DOUBLEBUF] 
             @screen.title = "Pong"

             @queue = Rubygame::EventQueue.new
             @clock =  Rubygame::Clock.new
             @clock.target_framerate = 60
      end

      def run!
          loop do
                      update
                      draw
                      @clock.tick
           end  
      end

      def update
      end

      def draw
      end
end

g = Game.new
g.run!
4

3 に答える 3

2

クラス名はなく、キーワード「クラス」だけです。

于 2013-09-13T15:51:54.940 に答える
2
class

次のようにする必要があります。

class Game

これで始められます。

スタイル的には、あなたのコードは Ruby に対して間違ったフォーマットになっています:

  • 2 スペースのインデントを使用する
  • メソッド名の後に末尾を使用するのは賢明()です: 読んでいるときにそれを視覚的に区別します。Ruby が誤解し、明確なメソッドとその名前の変数の使用が見られるまで、メソッドが変数であると考える場合があります。 .
  • 次のようなメソッドのパラメーターを括弧で囲みます。

    @screen = Rubygame::Screen.new [640, 480], 0, [Rubygame::HWSURFACE, Rubygame::DOUBLEBUF] 
    

    周囲のパラメーターなしでブロックをメソッド呼び出しに渡そうとすると、デバッグの世界に遭遇する可能性があります。Ruby は混乱し、エラーをスローします。それらを囲む習慣を身につけるだけで、問題をきれいに、そして大騒ぎせずに回避できます。

于 2013-09-13T15:54:49.303 に答える
0

コードに根本的な構文エラーがあるため、これは非常に不可解なエラー メッセージです。

他の人が指摘したように、問題はクラス名がないことです。つまり、次の代わりに 4 行目です。

class

これである必要があります:

class Game

しかし、なぜ?そして、それが「ゲーム」であることをどのように知ったのでしょうか?

Ruby では通常、"class" キーワードの後に​​名前を含めます。この名前を使用して、このクラス定義に基づいてオブジェクトを作成できます。これは、プログラムの最後から 2 番目の行で起こっていることです。

g = Game.new

この行は、「'Game' クラスの新しいインスタンスを作成し、それを変数 'g' に割り当てる」ことを示しています。この行が実際に機能するには、「Game」という名前のクラスが必要です。これは、このクラスの名前がどうあるべきかの手がかりです。

Ruby の学習における最初の困難を乗り越えていることは明らかです。それを続けてください!より多くの構文を習得できるようになるにつれて、それはより簡単になり始めます。

幸運を!

于 2013-09-13T19:01:26.640 に答える