我想把這個卡片陣列變成一個字串(我想要的輸出在底部)這是我的代碼:
# Returns an array of 5 cards in player's hand:
# => Eg: ['6?', '3?', 'A?', 'J?', 'J?']
private
def cards
%w(6? 3? A? J? J?)
end
def to_s
cards.map {|card| "-" card.to_s}.join("-")
end
end
我想要的輸出是這樣的一串卡片: - 6? - 3? - A? - J? - J? -
uj5u.com熱心網友回復:
由于當前提出的問題,您有 3 個問題:
首先,您嘗試創建私有方法而不首先呼叫class. 這也解釋了額外的end. 為了解決這個問題,我們可以在開頭添加類呼叫,如下所示:
class Test
private
def cards
%w(6? 3? A? J? J?)
end
def to_s
cards.map {|card| "-" card.to_s}.join("-")
end
end
其次,我們需要以某種方式實際使用該類。我們可以使用Class.new它,如下所示:
class Test
private
def cards
%w(6? 3? A? J? J?)
end
def to_s
cards.map {|card| "-" card.to_s}.join("-")
end
end
puts Test.new
#=> "-6?--3?--A?--J?--J?"
我只能假設您發布的代碼部分不完整,您在前幾件事上沒有遇到問題,并且您只是在該輸出行中遇到了格式問題。如果是這樣,有很多不同的方法可以做到這一點,但您的主要問題是代碼的以下部分:
"-" card.to_s}.join("-")
您正在遍歷陣列并"-"在每個元素之前添加 a 。然后,您將這些元素與冗余連接起來"-"以創建您的字串。你需要擺脫其中一個。我建議像這樣擺脫后者:
cards.map {|card| "-" card.to_s}.join
還值得注意的是,您的陣列元素已經是字串,因此.to_s沒有必要。因此,您的行可以簡化為:
cards.map {|card| "-" card}.join
這將導致 #=> "-6?-3?-A?-J?-J?"
現在唯一缺少的是最后一個沖刺。為了解決這個問題,我們只需在新加入的陣列的末尾獨立添加破折號,如下所示:
cards.map {|card| "-" card}.join "-"
完成的測驗將如下所示:
class Test
private
def cards
%w(6? 3? A? J? J?)
end
def to_s
cards.map {|card| "-" card}.join "-"
end
end
puts Test.new
#=> "-6?-3?-A?-J?-J?-"
不過,歸根結底,您的字串格式問題基本上可以通過替換("-")為 "-"
uj5u.com熱心網友回復:
加入格式字串
在類內部,您可以使用cards.join和 格式字串的組合相當容易地做到這一點。例如:
def cards
%w(6? 3? A? J? J?)
end
def to_s
sprintf "- %s -", cards.join(" - ")
end
您可以通過定義#cards 方法在類外部的irb 中對此進行測驗,然后使用格式字串和通過將卡片作為引數加入而形成的字串呼叫Kernel#sprintf 。
sprintf "- %s -", cards.join(" - ")
#=> "- 6? - 3? - A? - J? - J? -"
還有其他可用的插值方法,例如Kernel#format、嵌入式運算式和 % 樣式的插值運算式,但這看起來既簡單又得到任何合理的最新 Ruby 版本的良好支持。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411416.html
標籤:
下一篇:Ruby中陣列與范圍的效率
