Ric*_*d_G 1 ruby ruby-on-rails ruby-on-rails-3
我正在开发一个Ruby应用程序,并使用puts和否则在方法中显示变量以跟踪正在发生的事情.当然,这正在改变方法的"回归".是否有一个通用的Ruby变量,允许我在终止该方法之前访问方法中的当前返回变量?这样,我可以在put中访问它,然后确保在终止之前再次设置它.我知道该方法的最后结果是传递的结果.我正在寻找一种访问该变量的通用方法,无论它在我调试的任何方法中是什么.
我使用Rubymine作为我的IDE,我用它来进行调试.但是,有一些关于REPL的东西就像IRB一样有趣.它可能是我的360汇编程序员,但我约会自己.你们有多少人在1969年首次编程?大声笑.
谢谢.
一种选择可能是.tap方法.假设你有
x = foo
Run Code Online (Sandbox Code Playgroud)
并想知道foo外面的回报价值是多少:
x = foo.tap { |r| puts r.inspect }
Run Code Online (Sandbox Code Playgroud)
puts r.inspect写入的剩余部分p r,这是相同的有效的简写语法(顺便说一下,p返回它的参数,所以你可以p在很多情况下直接在返回的变量前面 - 一些语法细节除外)
或者,如果你想在里面检查foo,定义是这样的:
def foo
# Do stuff
something_that_is_returned
end
Run Code Online (Sandbox Code Playgroud)
您可以将其添加.tap到最后一个语句而不影响返回的值:
def foo
# Do stuff
something_that_is_returned.tap { |r| p r }
end
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为.tap将当前对象生成到块,并返回原始对象,而不管块的返回值.将a插入.tap到一长串方法中来检查中间结果非常有用.
你有
x = foo.map {|x| whatever}.select {|x| whatever}
Run Code Online (Sandbox Code Playgroud)
并且想要知道select接收什么而不重写大量代码:
x = foo.map {|x| whatever}.tap { |r| p r }.select {|x| whatever}
Run Code Online (Sandbox Code Playgroud)
如果你发现自己做了很多,你可能希望为它定义一个全局方法:
def tapp
tap do |o|
p o
end
end
Run Code Online (Sandbox Code Playgroud)
要使用,只需附加.tapp到表达式:
something_that_is_returned.tapp
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |