2013-11-25 108 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