私は何か非常に根本的な欠点があるように感じます。なぜなら、より多くの髪を引き裂かないようにするために、p1、p1t、p1t2が "hand = newgame" p1を見る。私はなぜp1が変更されているのか分からないので、私はここで完全に困惑しています。どんな助けでも大いに感謝します。変数の基本的な問題
# encoding: utf-8
class Cards
def view hand
x = 0
hand.each do |card|
if card[0] == 's'
card[0] = '♠'
elsif card[0] == 'd'
card[0] = '♦'
elsif card[0] == 'h'
card[0] = '♥'
elsif card[0] == 'c'
card[0] = '♣'
else
#nil
end
hand[x] = card
x = x + 1
end
prettyhand = ''
hand.each do |card|
prettyhand = prettyhand + card[0] + card[1] + ' '
end
return prettyhand
end#view
end#Cards
###########
deck = 0
up = 0
p1 = 0
p2 = 0
newgame = Cards.new
p1 = [["c", "4"], ["s", "4"], ["d", "q"], ["c", "8"], ["s", "5"], ["s", "q"], ["h", "3"], ["c", "10"]]
p1t = []
p1t2 = []
hand = ''
p1.each do |card|
p1t.push card
end
p1t.each do |card|
p1t2.push card
end
p '----------------------------------'
p 'fresh p1:'
p p1
p p1t
p p1t2
hand = newgame.view p1
p 'unfresh p1:'#why is this changing??
p p1
p p1t
p p1t2
p '----------------------------------'
出力:あなたは括弧もメソッドシグネチャでは、あなたは常にあなたのコードでそれらを省略する理由はわからないいいです、hand
(BTWパラメータを取る方法view
を定義している
"----------------------------------"
"fresh p1:"
[["c", "4"], ["s", "4"], ["d", "q"], ["c", "8"], ["s", "5"], ["s", "q"], ["h", "3"], ["c", "10"]]
[["c", "4"], ["s", "4"], ["d", "q"], ["c", "8"], ["s", "5"], ["s", "q"], ["h", "3"], ["c", "10"]]
[["c", "4"], ["s", "4"], ["d", "q"], ["c", "8"], ["s", "5"], ["s", "q"], ["h", "3"], ["c", "10"]]
"unfresh p1:"
[["♣", "4"], ["♠", "4"], ["♦", "q"], ["♣", "8"], ["♠", "5"], ["♠", "q"], ["♥", "3"], ["♣", "10"]]
[["♣", "4"], ["♠", "4"], ["♦", "q"], ["♣", "8"], ["♠", "5"], ["♠", "q"], ["♥", "3"], ["♣", "10"]]
[["♣", "4"], ["♠", "4"], ["♦", "q"], ["♣", "8"], ["♠", "5"], ["♠", "q"], ["♥", "3"], ["♣", "10"]]
"----------------------------------"
特に、これはメソッド呼び出しにも当てはまります。したがって、あなたのCards#viewメソッドは引数を変更します。 –
私は理解すると思います!それでは、ここで最高の解決策は何ですか?配列を文字列に変換してコピーを作成する必要がありますか?ありがとう! – catbat
@catbat:私の更新された答えをチェックしてください –