只是为了练习我用ruby实现了一个队列类.队列中的元素是节点,它们在另一个类中实现.这些节点保持一定的值,并且在添加到队列时还可以保存有关其后继的信息.节点类如下所示:
class Node
attr_accessor :value, :successor
def initialize(value)
@value = value
@successor = nil
end
def set_successor(successor)
@successor = successor
end
def get_successor()
@successor
end
def get_value()
@value
end
def to_s()
@value.to_s
end
end
Run Code Online (Sandbox Code Playgroud)
在创建了诸如object1 = Node.new(12)
和之类的对象之后object2 = Node.new("Foo")
,我可以使用该get_value
方法来获取对象值,这正是该方法应该做的事情.
puts object1.get_value
==> 12
puts object2.get_value
==> Foo
Run Code Online (Sandbox Code Playgroud)
然而,当只使用puts object1
或puts object2
仍然是对象值时,显示12和Foo.在这里,我期待一个更加神秘的消息,告诉我这是类节点的一个对象,它就是对象.
puts object1.class
==> Node
Run Code Online (Sandbox Code Playgroud)
那么,是否有人知道一个提示,为什么显示对象值,实际上应该显示整个对象?
puts
to_s
在打印之前调用对象上的方法.您已经定义to_s
在类中调用to_s
的@value
.因此,类的实例具有与它们保存的值相同的字符串表示形式.
如果你愿意的话
class Node
# ...
def to_s
"Node<#{@value.to_s}>"
end
end
Run Code Online (Sandbox Code Playgroud)
你会得到的
node = Node.new(42)
puts node
# Node<42>
Run Code Online (Sandbox Code Playgroud)
作为旁注:您的Ruby代码不是非常惯用,这里有一些观察:
()
attr_accessor
就是为了什么nil
value
而不是实例var@value
这是一个等效的实现:
class Node
attr_accessor :value, :successor
def initialize(value)
@value = value
end
def to_s
value.to_s
end
end
Run Code Online (Sandbox Code Playgroud)
在行动:
node = Node.new(42)
node.value = 123
succ = Node.new(124)
node.successor = succ
puts node
# 123
puts node.successor
# 124
Run Code Online (Sandbox Code Playgroud)
如果您不想使用setter value
,请使用attr_reader
而不是attr_accessor
.
归档时间: |
|
查看次数: |
215 次 |
最近记录: |