让我们说我想用一个变量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;
}
}
答案 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。 “自信的红宝石”。