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

问题描述 投票:0回答:3

让我们说我想在红宝石中创建一个class Person,变量@name@age。确保变量具有特定类的最佳方法是什么:@name是String,@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;
    }
}
ruby types instance-variables
3个回答
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 

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.