在Ruby中强制实例变量类型的最佳方法是什么?

时间:2019-03-17 23:48:25

标签: ruby types instance-variables

让我们说我想用一个变量class Person@name在ruby中创建一个@age。确保变量具有特定类的最佳方法是什么:@name是字符串,而@age是Integer?

这不是很明显,因为红宝石使用“鸭型”。我假设可以在raise方法中使用initialize子句,但我想知道什么是最佳实践?

例如,在Java中,我可以声明变量类型,并通过传递给具有相同类型的构造函数参数来对其进行赋值。

class Person {  
    private String name;
    private int age;

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

2 个答案:

答案 0 :(得分:1)

TypeError是内置的,通常使用。 Kernel#raise也很好。

class Person
  def initialize(age)
    raise TypeError, "age should be an Integer" unless age.is_a?(Integer)
    @age = age 
  end 
end 

答案 1 :(得分:0)

  

“如果在编写方法时考虑了特定的输入类型,例如Integer,我们可以使用Ruby的标准化转换方法来确保我们正在处理代码期望的类型。如果要提供最大的输入余地,可以使用#to_i之类的显式转换方法。如果我们想在确保客户端代码不会公然滥用我们的方法的同时提供一点灵活性,则可以使用诸如#to_int之类的隐式转换。”

摘录自:Avdi Grimm。 “自信的红宝石”。