2017-10-19 30 views
1

在JavaScript中,console.log是這樣的:紅寶石等同於JavaScript的 '的console.log(A,B)'

$ node 
> console.log(1,2) ; console.log(3,4) 
1 2 
3 4 

在Ruby中,我要輸出的a值,後面有一個空格,然後b的值,然後是一個換行符。這些都不令人滿意:

$ irb 
2.4.1 :001 > print 1,2 ; print 3,4 
1234 => nil 
2.4.1 :002 > puts 1,2 ; puts 3,4 
1 
2 
3 
4 
=> nil 

我是否運氣不好,沒有滾動自己的?

回答

6

根據the doc,您必須覆蓋字段分隔符和記錄分隔符。

$, = " " # field separator 
$\ = "\n" # record separator 
print 3, 5 
3 5 
nil 
+0

謝謝!如果我喜歡,我可以把它放在我的.irbrc中。 – Purplejacket

1

相當於將

printf "%s %s\n", 1, 2 

puts [1, 2].join(" ") 

但你試圖模仿JavaScript來顯示在一個線上的兩個變量的內容,我不知道的JavaScript但在Ruby中,用逗號分隔的兩個變量是一個數組。真正的紅寶石相當於將

p [1, 2] 

或者因爲你使用IRB

[1, 2] 

在CONSOLE.LOG還可以看到在其執行該代碼行,你可以做到這一點與__LINE__。 一個非常簡單的調試,同時執行腳本就可以做到的,是這樣的

var = "content" 
[__FILE__, __LINE__, "var", var] 

這樣你得到其中線位於,行號,變量和內容的名稱的文件的名稱。如果你喜歡,可以把它叫做可憐的調試器或console.log。

1

紅寶石等同於JavaScript的console.log

概念,Ruby的Logger類接近:

require 'logger' 
logger = Logger.new(STDOUT) 

logger.info [1, 2] 
logger.info [3, 4] 

但其默認輸出是完全不同的:

I, [2017-10-20T09:29:16.372886 #13107] INFO -- : [1, 2] 
I, [2017-10-20T09:29:16.372966 #13107] INFO -- : [3, 4] 

你可以寫一個自定義格式化程序:

class SimpleFormatter 
    def call(severity, time, progname, msg) 
    "%s\n" % msg2str(msg) 
    end 

    def msg2str(msg) 
    case msg 
    when String then msg 
    when Array then msg.map(&:inspect).join(' ') 
    else msg.inspect 
    end 
    end 
end 

用法:

require 'logger' 
logger = Logger.new(STDOUT, formatter: SimpleFormatter.new) 

logger.info [1, 2] 
logger.info [3, 4] 

輸出:

1 2 
3 4 

你也可以採取severity考慮到colorize你的輸出相應的(所以logger.warn打印在紅色,等黃,logger.error打印。)