在Ruby中p和puts有区别吗?
当前回答
除了上面的答案,在控制台输出中有一个微妙的差异——即存在/不存在倒逗号/引号——这可能是有用的:
p "+++++"
>> "+++++"
puts "====="
>> =====
我发现如果你想做一个简单的进度条,使用它们的近亲,打印,这个很有用:
array = [lots of objects to be processed]
array.size
>> 20
这给出了100%进度条:
puts "*" * array.size
>> ********************
这将在每次迭代中增加一个增量*:
array.each do |obj|
print "*"
obj.some_long_executing_process
end
# This increments nicely to give the dev some indication of progress / time until completion
>> ******
其他回答
这两个相等:
p "Hello World"
puts "Hello World".inspect
(inspect提供了一个比to_s方法更直观的对象视图)
P方法将打印更广泛的可调试消息,其中put将美化消息代码。
例:请看下面的代码行:
msg = "hey, Use \#{ to interpolate expressions"
puts msg #clean msg
p msg #shows \ with #
输出将是
hey, Use #{ to interpolate expressions
"hey, Use \#{ to interpolate expressions"
查看输出PIC以获得更清晰的信息
除了上面的答案,在控制台输出中有一个微妙的差异——即存在/不存在倒逗号/引号——这可能是有用的:
p "+++++"
>> "+++++"
puts "====="
>> =====
我发现如果你想做一个简单的进度条,使用它们的近亲,打印,这个很有用:
array = [lots of objects to be processed]
array.size
>> 20
这给出了100%进度条:
puts "*" * array.size
>> ********************
这将在每次迭代中增加一个增量*:
array.each do |obj|
print "*"
obj.some_long_executing_process
end
# This increments nicely to give the dev some indication of progress / time until completion
>> ******
foo和foo。inspect是一样的
这可能说明了一个关键的区别,即p返回传递给它的值,而as puts返回nil。
def foo_puts
arr = ['foo', 'bar']
puts arr
end
def foo_p
arr = ['foo', 'bar']
p arr
end
a = foo_puts
=>nil
a
=>nil
b = foo_p
=>['foo', 'bar']
b
['foo', 'bar']
基准数据显示看跌期权速度较慢
require 'benchmark'
str = [*'a'..'z']
str = str*100
res = Benchmark.bm do |x|
x.report(:a) { 10.times {p str} }
x.report(:b) { 10.times {puts str} }
end
puts "#{"\n"*10}"
puts res
0.010000 0.000000 0.010000 ( 0.047310)
0.140000 0.090000 0.230000 ( 0.318393)
推荐文章
- 是否可以在MiniTest中运行单个测试?
- 如何在Ruby中生成a和b之间的随机数?
- 无法安装gem -未能建立gem本地扩展-无法加载这样的文件——mkmf (LoadError)
- 如何在Ruby中创建文件
- 什么是Ruby文件。开放模式和选项?
- Ruby数组到字符串的转换
- 如何分割(块)一个Ruby数组成X元素的部分?
- Ruby中“or”和||的区别?
- 如何测试参数是否存在在轨道
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- RVM不是一个函数,用' RVM use…’不会起作用
- 了解Gemfile。锁文件
- 如何确定一个数组是否包含另一个数组的所有元素
- 是什么导致这个ActiveRecord::ReadOnlyRecord错误?
- 最好的打印散列的方法