Несколько типов данных в инициализации класса (Ruby) - PullRequest
1 голос
/ 03 февраля 2012

РЕДАКТИРОВАТЬ: решено. Несколько типов данных не были виновником; код ниже работает отлично. Видимо, у меня было несоответствие где-то еще.

Я программист-любитель и новичок в Ruby. Я пытаюсь создать класс, который можно инициализировать несколькими типами данных. Я имею в виду следующее:

У меня есть, скажем, "класс игрока". Я хочу инициализировать его, установив имя (строку) и позиции x и y (в данном случае целые числа). Тем не менее, я получаю сообщение об ошибке, когда я делаю что-то вроде этого:

#Player class containing name:string, x:integer, y:integer
class Player
  attr_accessor :name, :x, :y
  def initialize(name,x,y) #Edit: I forgot to put "def" here in my example. This was not my problem, though.
  @name = name
  @x = x
  @y = y
  end
end

#Create player "Luke" at x:5, y:5
player = Player.new("Luke",5,5)

Ошибка, по-видимому, в том, что все параметры будут иметь один тип данных, например, строки, числа с плавающей запятой или целые числа и т. Д.

Как я могу указать разные типы данных в моем методе инициализации класса?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Ваш код отлично работает для меня в Ruby 1.9.2p180 в Windows. Я даже добавил эти строки для проверки данных, и они ведут себя, как и ожидалось:

p player.name  # => "Luke"
p player.x     # => 5
p player.y     # => 5

Пожалуйста, опубликуйте упрощенный тестовый код, показывающий ошибку, сообщите нам точное сообщение об ошибке и сообщите, какую версию Ruby вы используете. Вся эта информация должна была быть в вашем первом посте. См http://sscce.org/.

0 голосов
/ 03 февраля 2012

В вашем примере вы пропускаете "def" перед "initialize".

0 голосов
/ 03 февраля 2012

Вы пропустили def в своем коде, def - это ключевое слово для определения метода, а initialize - это constructor класса (который будет вызываться при создании нового экземпляра класса).

#Player class containing name:string, x:integer, y:integer
class Player
  attr_accessor :name, :x, :y
  def initialize(name,x,y)
    @name = name
    @x = x
    @y = y
  end
end

Обновление:

В ruby ​​отсутствует объявление типа данных для переменных, это означает, что вам не нужно указывать (объявлять) тип данных переменной перед ее использованием. Следовательно, следующий код является действительным,

> var = "Robert George"
 => "Robert George" 
> var = "2010"
 => "2010"

Соответственно

> Player.new("Robert George", 10, 12)
 => #<Player:0x999b3a4 @name="Robert George", @x=10, @y=12> 
> Player.new(10, 12, "Wrong data")
 => #<Player:0x9976158 @name=10, @x=12, @y="Wrong data">

Он работает независимо от того, какой тип данных вы передаете, разработчики обязаны убедиться, что ваши данные верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...