ルビーを学んでいます。今日はミックスインについて学び、スタッククラスの比較メソッドを実装することに決めました。最初にスタックのサイズに基づいてスタックを比較していましたが、スタックサイズが等しい場合はスタック内の各要素を比較してどちらが大きかったかを判断する機能を追加したかったのです。そして、すべての要素が等しい場合、2つのスタックが等しくなるでしょう。ここに私のコードです:ルビーの要素に基づいてスタックを比較する
class Stack
include Enumerable
include Comparable
attr: stack
def initialize
@stack = []
end
def pop(element)
@stack.push(element)
end
def push(element)
@stack.pop(element)
end
def <=>(other)
if stack.size == other.stack.size then
stack.zip(other.stack).all? { |s, other| s <=> other}
else
stack.size <=> other.stack.size
end
end
end
しかし、これは、私は次のテストを持っているときのために失敗します。
s1 = Stack.new
s2 = Stack.new
s1.push(1)
s1.push(2)
s1.push(3)
s2.push(1)
s2.push(2)
s2.push(4)
s2 > s1 # Should be true but is false
あなたの 'Stack'クラスは本当にどのように見えますか?あなたが持っているものは、構文的には有効ではありません。また、 'Array#pop'を使用して' Array#push'と 'Stack#push'を実装した' Stack#pop'はなぜ実装されていますか?さらに、 '<=>'は 'Fixnum'(-1、0、+1)を返しますが、' any? 'はそのブロックがtrueかfalseを返すことを期待しています。 {| s、その他| s <=> other} 'あなたは効果的に' all? {真} '。私はいくつかのデバッグ技術を学ぶ時だと思う。 –
's1'が' s2'より大きいいくつかの値を持ち、 's2'が' s1'よりも大きな値を持つケースをどう扱うといいでしょうか? – davidhu2000
@muistooshortクラスのインデントと欠落のほかに、これがどのように構文的に有効でないかはわかりません。それは文字どおりのように見えます。私のマシンではエラーなく実行されます。また、私は独自の配列のスタックスタッククラスを作成していました。私はそれをどうやって問題になったのですか?私が最後の部分をする方法を知っていたら、私はここで質問しません。私は2つの配列の要素を比較し、より大きな要素を持つものを返す方法を知らない。ソリューションにアプローチする方法がわからないとデバッグできませんか?私は周りを見回しました。私がしようとしていることに役立つものは何も見つかりませんでした。 –