Ruby, Method not found.

0

Hej, mam taki oto kod w Rubym:

module Actions
  attr_accessor :gameField, :blockPositions

  @gameField = [[0,1,0,0],
                [0,0,0,0],
                [1,0,0,0],
                [0,0,1,0]]

  @blockPositions = [ [15,  15], [115,  15], [215,  15], [315,  15],
                      [15, 115], [115, 115], [215, 115], [315, 115],
                      [15, 215], [115, 215], [215, 215], [315, 215],
                      [15, 315], [115, 315], [215, 315], [315, 315]]

 #Tutaj są funkcje...
 end

I teraz gdy dodam ten moduł tak jak poniżej

class GameBlock < GameObject
  include Actions

#Reszta kodu...
  def drawBlocks(surface)
    for i in 0..3
      for j in 0..3
        if gameField[i][j] != 0
          drawOnXY(surface, *blockPositions[i][j])
        end
      end
    end
  end
end

To zostaję obarczony błędami że w linijce:

if gameField[i][j] != 0

jest taki błąd:

game_block.rb:31:inblock (2 levels) in drawBlocks': undefined method []' for nil:NilClass (NoMethodError)

Dopiero zaczynam swoją przygodę z Rubym i muszę w nim zrobić projekt na zaliczenie, więc nie znam zbytnio smaczków tego języka, jeśli ktoś byłby tak miły i mi to wyjaśnił to będę wielce zobowiązany. Dodam, że próbowałem już zmieniać z gameField na @gameField ale to nic nie pomogło.

0

Nie możesz tak zadeklarować zmiennych instancji. Poza tym trzymaj się konwencji nazewniczych Rubego (snake_case). Nie używaj for, zamiast tego masz times, each etc.

0

W jaki sposób mam je więc zadeklarować? A jeśli chodzi o konwencję nazewnictwa, to ciężko się przestawić po Javie i C++ ;) Jak pisałem, ledwo co zacząłem przygodę z Rubym i jest to w sumie mój pierwszy projekt w nim.

1

Musisz to zrobić w konstruktorze lub stworzyć getter w takiej postaci:

def game_field
  @game_field ||= [[0,1,0,0],
                [0,0,0,0],
                [1,0,0,0],
                [0,0,1,0]]
end

Ogólnie w ramach nauki polecam zapoznać się z https://github.com/bbatsov/ruby-style-guide.

0

Działa! Dzięki wielkie ;) Muszę do wtorku oddać projekt w dwóch językach Java i Ruby, więc na razie projekt w Rubym piszę po partyzancku ale podoba mi się ten język i jak już będę miał to z głowy to usiądę do niego na poważnie :) Jeszcze raz dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0