我正在尝试在Ruby中打印这个数组。我得到的输出是3行:
#Lod:0x0000000002690170>
如果我使用检查,我会这样:
@ lodnr =“10000”,@ lobnr =“150”等等。
这是我的代码
class Lod
attr_accessor :lodnr
attr_accessor :lobnr
attr_accessor :stknr
def initialize(lodnr, lobnr, stknr)
@lodnr = lodnr
@lobnr = lobnr
@stknr = stknr.chomp
end
$sold = Array.new
input = File.open("lodsedler.txt", "r")
input.each do |line|
l = line.split(',')
$sold << Lod.new(l[0], l[1], l[2])
end
puts $sold
end
输入文件如下所示
10000, 150, 5
500, 10, 1
8000, 171, 3
答案 0 :(得分:2)
如果您尝试p $sold
,您可能会发现更多问题。
结果是
[#<Lod:0x26d8fa0 @lodnr="10000", @lobnr=" 150", @stknr=" 5">, #<Lod:0x26d8ee0 @lodnr="500", @lobnr=" 10", @stknr=" 1">, #<Lod:0x26d8e20 @lodnr="8000", @lobnr=" 171", @stknr=" 3">]
你得到一个包含三个LOD对象的数组。
没有为Lod对象定义特定输出,因此以您看到的技术版本打印。使用to_s
,您可以定义自己的输出。
示例:
class Lod
attr_accessor :lodnr
attr_accessor :lobnr
attr_accessor :stknr
def initialize(lodnr, lobnr, stknr)
@lodnr = lodnr
@lobnr = lobnr
@stknr = stknr.chomp
end
def to_s
"<Lod %8s, %5s, %3s>" % [@lodnr, @lobnr, @stknr]
end
def inspect; to_s; end
end
$sold = Array.new
DATA.each do |line|
l = line.split(',')
$sold << Lod.new(l[0], l[1], l[2])
end
p $sold
puts $sold
__END__
10000, 150, 5
500, 10, 1
8000, 171, 3
输出结果为:
[<Lod 10000, 150, 5>, <Lod 500, 10, 1>, <Lod 8000, 171, 3>]
<Lod 10000, 150, 5>
<Lod 500, 10, 1>
<Lod 8000, 171, 3>
您可以根据首选输出调整to_s
方法。
一些评论:
__END__
和DATA
替换了外部文件。 (使制作MWE更容易)答案 1 :(得分:0)
将to_s定义添加到类Lod:
class Lod
def to_s
"#{@lodnr} #{@lobnr} #{@stknr}"
end
end