让我们说我想在红宝石中创建一个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;
}
}
TypeError是内置的,通常使用。 Kernel#raise
也很好。
class Person
def initialize(age)
raise TypeError, "age should be an Integer" unless age.is_a?(Integer)
@age = age
end
end
“如果一个方法是用特定的输入类型编写的,比如Integer,我们可以使用Ruby的标准化转换方法来确保我们处理代码所期望的类型。如果我们想在输入中提供最大的余地,我们可以使用#to_i等显式转换方法。如果我们想要提供一点灵活性,同时确保客户端代码不会公然误用我们的方法,我们可以使用隐式转换,例如#to_int。“
摘录自:Avdi Grimm。 “自信的红宝石”。