繁体   English   中英

相当于Javascript的'console.log(a,b)'的Ruby

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM