Рубиновый эквивалент для Javascript 'console.log (a, b)'

1

В 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 ответа

6

Согласно документу, вы должны переопределить разделитель полей и разделитель записей.

$, = " "    # field separator
$\ = "\n"   # record separator
print 3, 5
3 5
nil
  • 0
    Спасибо! Я могу положить это в мой .irbrc, если захочу.
1

Ruby-эквивалент для 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 чтобы соответствующим образом раскрасить ваш результат (так что logger.warn печатает желтым цветом, logger.error печатает красным цветом и т.д.)

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]

Таким образом вы получите имя файла, в котором находится строка, номер строки, имя переменной и ее содержимое. Назовите это бедным отладчиком mans или console.log, если хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню