有人可以向我解释这种方法是如何工作的,我知道它打印一张桌子并且效果很好但是我不明白它是如何工作的:( 救命!
class CreditCard
attr_reader :name, :number, :expiration, :cvc
attr_accessor :status
def initialize(name,number,expiration,cvc,status)
@name = name
@number = number
@expiration = expiration
@cvc = cvc
@status = status
end
def information
card_information = "#{@name}", "#{@number}", "#{@expiration}", "#{@cvc}", "#{@status}"
end
end
card_array = []
credit_card.each do |x|
card_array << x.information
end
print "Name".center(20)," Number".center(25)," Expiration".center(20)," Cvc".center(22)," Status".center(25),"\n"
puts "___________________________________________________________________________________________________________________"
card_array.each do |x|
x.each do |card|
print "|",card.center(20),"|"
end
print "\n"
end
print "\n"
答案 0 :(得分:0)
不确定哪个部分特别令人困惑,所以如果这是一个小小的居高临下的道歉。让我们逐行逐步完成:
print "Name".center(20)," Number".center(25)," Expiration".center(20)," Cvc".center(22)," Status".center(25),"\n"
这第一行调用print传递一个可变数量的字符串参数,一个接一个地打印出来。这些字符串参数都是center作为列标题。输出所有标题后,将在输出中的新行开始打印换行符。
puts "___________________________________________________________________________________________________________________"
此行仅用于格式化,在表头和内容之间输出分隔符。由于他们使用puts而不是在此处打印,因此会在字符串后自动输出新行。
card_array.each do |x|
...
end
此块是针对每个构造的,因此对于card_array
中的每个信用卡,我们将卡分配给局部变量x
,然后执行此块内的代码。
x.each do |card|
...
end
同样,这是一个foreach结构,其中x
是信用卡作为字符串数组(请参阅information
方法)。我们将每个字符串一次分配给card
,然后在其中执行该块。
print "|",card.center(20),"|"
这是另一个打印调用,我们使用可变长度参数传递3个参数,card
中的当前字符串以及我假设为表格单元格边框。
print "\n"
然后我们再打两个电话打印,在每个块的末尾打印出新行,这样每张信用卡都在它自己的行上。
在解释了相关的块之后,我觉得这段代码的混淆可能来自于information
方法,其中,可能不会立即显而易见
card_information = "#{@name}", "#{@number}", "#{@expiration}", "#{@cvc}", "#{@status}"
实际上正在创建一个字符串数组,然后将其添加到card_array
中,因此card_array
是一个数组数组,最终看起来像
[ ["card holder name", "card number", ...], ["second card hold name", "second card number", ...], ...]
我花了二读才发现他们正在这样做,所以想象一下这可能是被忽略的东西,使得有问题的块不清楚(如果你认为它是一组CreditCard
对象而不是一串字符串。)