gpt4 book ai didi

ruby - 用 nil 填充堆栈并将 "top"解释为最后一个非 nil 值是否有一些优势?

转载 作者:数据小太阳 更新时间:2023-10-29 08:23:20 25 4
gpt4 key购买 nike

在处理 rubymonk 时练习中,我被要求实现一个具有硬大小限制的堆栈。如果我尝试压入太多值,或者如果我尝试弹出一个空堆栈,它应该返回“nil”。

我的解决方案如下,然后是他们的解决方案。我的通过了我可以在我的 IDE 中进行的所有测试,但未通过 ruby​​monk 的测试。但这不是我的问题。

问题是,为什么他们选择用 nils 填充堆栈,而不是像我的版本那样让它收缩和增长?

这只会让他们的代码更加复杂。

这是我的解决方案:

class Stack
def initialize(size)
@max = size
@store = Array.new
end

def pop
empty? ? nil : @store.pop
end

def push(element)
return nil if full?
@store.push(element)
end

def size
@store.size
end

def look
@store.last
end

private

def full?
@store.size == @max
end

def empty?
@store.size == 0
end
end

这是公认的答案

class Stack
def initialize(size)
@size = size
@store = Array.new(@size)
@top = -1
end

def pop
if empty?
nil
else
popped = @store[@top]
@store[@top] = nil
@top = @top.pred
popped
end
end

def push(element)
if full? or element.nil?
nil
else
@top = @top.succ
@store[@top] = element
self
end
end

def size
@size
end

def look
@store[@top]
end

private

def full?
@top == (@size - 1)
end

def empty?
@top == -1
end
end

最佳答案

我猜他们为什么这样做是因为他们不想使用您在解决方案中使用的 array.poparray.push。那是一个教程,你正在学习实现 STACK ,所以如果你使用由 ruby​​ array( poppush) 提供的内置方法,那就没用了:)。

所以基本上他们试图让事情对你来说不那么抽象,所以你需要忘记 ruby​​ 已经包含 poppush 然后写一个解决方案,它会之后的解决方案与他们的解决方案完全一样。

我没有批评你的意思,只是说这个练习的意义何在。

记得在大学里我们把所有的时间都花在了实现堆栈和套接字之类的东西上,后来我们意识到对于这些东西来说,它们都是定义的扩展。所以我建议忘记所有你知道的东西,然后做这些练习:)。

关于ruby - 用 nil 填充堆栈并将 "top"解释为最后一个非 nil 值是否有一些优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com