Ruby等效于Javascript' console.log(a,b)'

时间:2017-10-19 22:32:03

标签: javascript ruby

在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 

如果我没有自己动手,我会失败吗?

3 个答案:

答案 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打印为红色等。