避免ruby中的初始化方法
我正在编写下面的Ruby程序避免ruby中的初始化方法,ruby,Ruby,我正在编写下面的Ruby程序 class Animal attr_reader :name, :age def name=(value) if value == "" raise "Name can't be blank!" end @name = value end def age=(value) if value < 0 raise "An age of #{value} isn't valid!" e
class Animal
attr_reader :name, :age
def name=(value)
if value == ""
raise "Name can't be blank!"
end
@name = value
end
def age=(value)
if value < 0
raise "An age of #{value} isn't valid!"
end
@age = value
end
def talk
puts "#{@name} says Bark!"
end
def move(destination)
puts "#{@name} runs to the #{destination}."
end
def report_age
puts "#{@name} is #{@age} years old."
end
end
class Dog < Animal
end
class Bird < Animal
end
class Cat < Animal
end
whiskers = Cat.new("Whiskers")
fido = Dog.new("Fido")
polly = Bird.new("Polly")
polly.age = 2
polly.report_age
fido.move("yard")
whiskers.talk
然后,在我的代码中应该有一个initialize
方法,该方法将使用值“Whiskers”初始化实例变量
但是如果我这样做了,那么我使用的属性访问器的目的是什么?或者我们只能使用一个,如果我必须使用属性访问器,那么我应该避免在对象创建期间初始化实例变量。
initialize
是类的构造函数,它在创建对象时运行
属性访问器用于读取或修改现有对象的属性
参数化构造函数的优点是,可以用一种简洁的方法为对象的属性赋值
whiskers = Cat.new("Whiskers")
看起来更好,写起来也更容易
whiskers = Cat.new
whiskers.name = "Whiskers"
在本例中,initialize
的代码如下所示
class Animal
...
def initialize(a_name)
name = a_name
end
...
end
initialize
是类的构造函数,它在创建对象时运行
属性访问器用于读取或修改现有对象的属性
参数化构造函数的优点是,可以用一种简洁的方法为对象的属性赋值
whiskers = Cat.new("Whiskers")
看起来更好,写起来也更容易
whiskers = Cat.new
whiskers.name = "Whiskers"
在本例中,initialize
的代码如下所示
class Animal
...
def initialize(a_name)
name = a_name
end
...
end
所有
attr\u reader:foo
所做的就是定义方法def foo@傅;结束
。同样地,attr_writer:foo
对def foo=(val)执行此操作@foo=val;结束
。它们不会假设您想要如何构造initialize
方法,您必须添加如下内容
def initialize(foo)
@foo = foo
end
不过,如果您想减少属性的样板代码,可以使用或之类的东西。All
attr\u reader:foo
所做的是定义方法def foo@傅;结束
。同样地,attr_writer:foo
对def foo=(val)执行此操作@foo=val;结束
。它们不会假设您想要如何构造initialize
方法,您必须添加如下内容
def initialize(foo)
@foo = foo
end
不过,如果您想减少属性的样板代码,可以使用或之类的方法。您应该在类名的正下方定义一个方法,例如
def initialize name, age
@name = name
@age = age
end
您应该在类名的正下方定义一个方法,例如
def initialize name, age
@name = name
@age = age
end
请使用两个空格进行缩进并确保代码可读-@WandMaker确保我会注意。请使用两个空格进行缩进并确保代码可读-@WandMaker确保我会注意。您可能需要显示
initialize
的示例以实现此目的。您可能需要显示initialize
的示例实现这一目标。