【问题标题】:easy and clean puts in ruby简单干净的放入红宝石
【发布时间】:2014-11-19 12:03:37
【问题描述】:

我经常遇到这样的情况,我想在 Ruby 中调试一些东西。 然后我用“puts”输出到控制台。

以下示例:

Testvariable = 4
puts Testvariable

输出当然是:

4

现在我有很多输出,因此我经常写这样的东西:

Testvariable = 4
puts "Testvariable= " + Testvariable

那么输出是:

Testvariable= 4

现在这是一个非常简单的案例,但我希望它能说明我的问题。 有这种可能吗???

Testvariable = 4
prettyputs Testvariable

而且输出是直接的

Testvariable = 4

我希望你明白,我的“问题”是什么?当然写完整的字符串不是很多工作,但我只是想知道是否有快速简便的可能性?

【问题讨论】:

  • @MarekLipka: eval 似乎微不足道。 prettyputs 'Testvariable'
  • @SergioTulentsev 你是对的。您会添加适当的示例作为答案吗?
  • @MarekLipka:不,继续。 :)
  • 或者……你可以只使用调试器进行调试。

标签: ruby puts


【解决方案1】:

这是复制到:Ruby: getting variable name

简而言之:你不能得到一个变量的名字,但是你可以把一个字符串或者一个符号和你想显示的变量的名字放在一起

def prettyputs(symb, the_binding)
  var_name  = symb.to_s
  var_value = eval(var_name, the_binding)
  puts "#{var_name} = #{var_value.inspect}"
end

toto=1
prettyputs "toto",binding

prettyputs :toto,binding

【讨论】:

  • 是的,如果只有一个人可以避免得到绑定。
  • @SergioTulentsev binding_of_caller 救援
【解决方案2】:

有一个名为“ap”awesome_print 的 gem 或多或少可以满足您的需求。

您在此处列出的案例并没有真正解决问题,如果您正在“放置”东西,您可能想了解有关调试和测试工具的更多信息。

从 AP 文档中,考虑以下几点:

data = [ false, 42, %w(forty two), { :now => Time.now, :class => Time.now.class, :distance => 42e42 } ]

用 Ruby 的内置 puts 打印会很麻烦,但 AP 会打印以下内容:

$ ruby 1.rb
[
    [0] false,
    [1] 42,
    [2] [
        [0] "forty",
        [1] "two"
    ],
    [3] {
           :class => Time < Object,
             :now => Fri Apr 02 19:55:53 -0700 2010,
        :distance => 4.2e+43
    }
]

我知道这不是您想要的,但也许以下内容同样有用:

puts TestVariable.inspect

由于您将其命名为大写,我将假设它是一个类或常量,并且您想查看它的类型,.inspect 将为您完成。

【讨论】:

  • 我想他想自动将变量的名称和等号放在值之前。
  • 这正是我想要的。它不必是等号。只是任何迹象。只是好奇有没有答案……
  • 这是不可能的,因为变量是对内存中某事物的某个规范实例的“引用”,有时事物可以有多个名称,因此 Ruby 甚至无法反映自身来显示“名字”,因为没有一个名字。
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 2011-05-24
  • 2011-03-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2011-05-10
相关资源
最近更新 更多