
[英]Is there an equivalent to javascipt's console.log() in Shiny?
[英]Ruby equivalent for Javascript's 'console.log(a,b)'
在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
我会因为自己不走运而走运吗?
根据文档 ,您必须覆盖字段分隔符和记录分隔符。
$, = " " # field separator
$\ = "\n" # record separator
print 3, 5
3 5
nil
等效为
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。
相当于Javascript
console.log
Ruby
从概念上讲,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
以对输出进行相应的着色 (因此logger.warn
以黄色打印, logger.error
以红色打印等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.