在JavaScript中,console.log
的工作方式如下:
$ 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
如果我没有自己动手,我会失败吗?
答案 0 :(得分:6)
根据the doc,您必须覆盖字段分隔符和记录分隔符。
$, = " " # field separator
$\ = "\n" # record separator
print 3, 5
3 5
nil
答案 1 :(得分:1)
等价物是
printf "%s %s\n", 1, 2
或
puts [1, 2].join(" ")
但是你尝试模拟javascript以在一行上显示两个变量的内容,我不知道javascript但是在Ruby中,用逗号分隔的两个变量是一个数组。真正的Ruby等价物是
p [1, 2]
或者因为你使用irb
[1, 2]
在console.log中,您还可以看到执行此代码的行,您可以使用__LINE__执行此操作。 执行脚本时可以实现的非常简单的调试就像这样
var = "content"
[__FILE__, __LINE__, "var", var]
像这样,您可以获得该行所在文件的名称,行号,变量名称和内容。如果你愿意,可以将它称为穷人调试器或console.log。
答案 2 :(得分:1)
Ruby等效于Javascript' s
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
打印为红色等。