use*_*856 40 ruby constructor initialization class
我正在尝试创建一个类,它有一个构造函数,只需要一个参数.当我创建对象的新实例时,它返回一个指针.
class Adder
def initialize(my_num)
@my_num = my_num
end
end
y = Adder.new(12)
puts y
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?谢谢
War*_*Hog 70
当您使用new方法时,您将在新创建的对象上获得"引用".putskernel方法返回有关此对象的一些内部ruby信息.如果要获取有关状态对象的任何信息,可以使用getter方法:
class Adder
def initialize(my_num)
@my_num = my_num
end
def my_num
@my_num
end
end
y = Adder.new(12)
puts y.my_num # => 12
Run Code Online (Sandbox Code Playgroud)
或者您可以使用'attr_reader'方法在场景后面定义几个setter和getter方法:
class Adder
attr_accessor :my_num
def initialize(my_num)
@my_num = my_num
end
end
y = Adder.new(12)
puts y.my_num # => 12
Run Code Online (Sandbox Code Playgroud)
mik*_*kej 15
你没有做错任何事.假设你#<Adder:0xb7f9f710 @my_num=12>在Ruby中看到类似的东西,这只是你创建的对象的默认表示.
如果要在将对象传递给对象时将此行为更改为更友好,则puts可以覆盖to_s(to string)方法.例如
class Adder
def initialize(my_num)
@my_num = my_num
end
def to_s
"Adder with my_num = #{@my_num}"
end
end
Run Code Online (Sandbox Code Playgroud)
然后,当你这样做时,puts y你会看到Adder with my_num = 12
您还可以覆盖使用的inspect方法,例如,当Ruby irb控制台打印对象的表示时,例如
class Adder
def inspect
to_s # return same representation as to_s
end
end
Run Code Online (Sandbox Code Playgroud)
然后在irb:
>> y = Adder.new 12
=> Adder with my_num = 12
Run Code Online (Sandbox Code Playgroud)