Каков наилучший способ заставить тип переменных экземпляра в Ruby? - PullRequest
0 голосов
/ 18 марта 2019

Допустим, я хочу создать class Person в ruby ​​с переменными @name и @age.Каков наилучший способ гарантировать, что переменные имеют определенный класс: @name - это строка, а @age - это целое число?

Это неочевидно, поскольку в ruby ​​используется "типизатор".Я предполагаю, что мог бы использовать предложение raise в методе initialize, но я хотел бы знать, что является лучшим методом?

Например, в Java я мог бы объявлять типы переменных и задавать их, передавая конструкторуаргументы одного типа.

class Person {  
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Ответы [ 2 ]

1 голос
/ 18 марта 2019

TypeError является встроенным и обычно используется. Kernel#raise тоже хорошо.

class Person
  def initialize(age)
    raise TypeError, "age should be an Integer" unless age.is_a?(Integer)
    @age = age 
  end 
end 
0 голосов
/ 18 марта 2019

«Если метод написан с особым типом ввода, таким как Integer, мы можем использовать стандартизированные методы преобразования Ruby, чтобы гарантировать, что мы имеем дело с типом, который ожидает код. Если мы хотим обеспечить максимальную свободу ввода, мы можем использовать явные методы преобразования, такие как #to_i. Если мы хотим обеспечить небольшую гибкость, при этом гарантируя, что клиентский код не использует явно наш метод, мы можем использовать неявное преобразование, такое как #to_int. ”

Отрывок из: Авди Гримм. «Уверенный Рубин».

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