2013-11-25 65 views
-1

我试图在Ruby中打印这个数组。输出I得到的是3行这样的:在ruby中打印数组

#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 

回答

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变得更容易)
  • 取决于ruby版本的输出不同(有变化,如何写入数组)。
+0

那么它不出来一样,在我的电脑,还在说 [#<罗德:0x26d8fa0 @ lodnr = “10000”,@ lobnr = “ldnr =”8000“,@ stknr =”5“>,#,#] – Christian

+0

您是否复制我的代码并用我的代码尝试过?我想你在课堂外定义了'to_s'。你使用哪个Ruby版本?如果你还定义了像to_s这样的“检查”方法会发生什么? – knut

+0

我只是试着复制你的代码并运行它。输出仍然是[#Lod:0x000000002353138 @ lodnr =“10000”,@ lobnr =“150”,@ stknr =“5”>,# Christian

0

添加to_s定义类罗德:

class Lod 
    def to_s 
    "#{@lodnr} #{@lobnr} #{@stknr}" 
    end 
end 
+0

它不会出现在我的电脑上,它仍然说[#Lod:0x26d8fa0 @ lodnr =“10000”,@ lobnr =“150”,@ stknr =“5”>,#,#] – Christian