Ruby on rails 使用Ruby,我可以在返回方法中的返回变量之前访问它吗?
我正在开发一个Ruby应用程序,并使用puts和其他方式在方法中显示变量,以跟踪正在发生的事情。当然,这改变了方法的“返回”。是否有一个通用的Ruby变量允许我在终止该方法之前访问该方法中的当前返回变量?这样,我可以在puts中访问它,然后确保在终止之前再次设置它。我知道该方法的最后一个结果是向前传递的结果。我特别寻找一种访问该变量的通用方法,不管它是用什么方法调试的 我使用Rubymine作为我的IDE,我确实使用它进行调试。但是,关于REPL的一些东西,比如IRB,非常有趣。这可能是我的360汇编程序员,但我正在和自己约会。你们当中有多少人是在1969年开始编程的?哈哈Ruby on rails 使用Ruby,我可以在返回方法中的返回变量之前访问它吗?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在开发一个Ruby应用程序,并使用puts和其他方式在方法中显示变量,以跟踪正在发生的事情。当然,这改变了方法的“返回”。是否有一个通用的Ruby变量允许我在终止该方法之前访问该方法中的当前返回变量?这样,我可以在puts中访问它,然后确保在终止之前再次设置它。我知道该方法的最后一个结果是向前传递的结果。我特别寻找一种访问该变量的通用方法,不管它是用什么方法调试的 我使用Rubymine作为我的IDE,我确实使用它进行调试。但是,关于REPL的一些东西,比如IRB,非常有趣。这可能是我的36
谢谢。为什么简单的看跌期权不适合你
def foo
bar = 1
puts bar
bar
end
为什么简单的看跌期权对你不起作用
def foo
bar = 1
puts bar
bar
end
一个选项可能是
.tap
方法。假设你有
x = foo
并且想知道foo
的返回值是多少:
x = foo.tap { |r| puts r.inspect }
put r.inspect
的其余部分都是编写的pr
,这是相同内容的有效速记语法(顺便说一下,p
返回其参数,因此在许多情况下,您可以在返回的变量前面粘贴一个p
,除了一些语法细节)
或者,如果要检查
foo
的内部,并且定义如下:
def foo
# Do stuff
something_that_is_returned
end
您可以在不影响返回值的情况下,将添加到最后一条语句中。点击:
def foo
# Do stuff
something_that_is_returned.tap { |r| p r }
end
这是因为.tap
将当前对象生成块,并返回原始对象,而不考虑块的返回值。在一长串方法中插入。点击,检查中间结果是非常有用的
你有
x = foo.map {|x| whatever}.select {|x| whatever}
并且想知道select
在不重新编写大量代码的情况下接收到什么:
x = foo.map {|x| whatever}.tap { |r| p r }.select {|x| whatever}
如果您发现自己经常这样做,您可能希望为其定义一个全局方法:
def tapp
tap do |o|
p o
end
end
要使用,只需将.tapp
附加到表达式:
something_that_is_returned.tapp
一个选项可能是.tap
方法。假设你有
x = foo
并且想知道foo
的返回值是多少:
x = foo.tap { |r| puts r.inspect }
put r.inspect
的其余部分都是编写的pr
,这是相同内容的有效速记语法(顺便说一下,p
返回其参数,因此在许多情况下,您可以在返回的变量前面粘贴一个p
,除了一些语法细节)
或者,如果要检查foo
的内部,并且定义如下:
def foo
# Do stuff
something_that_is_returned
end
您可以在不影响返回值的情况下,将添加到最后一条语句中。点击:
def foo
# Do stuff
something_that_is_returned.tap { |r| p r }
end
这是因为.tap
将当前对象生成块,并返回原始对象,而不考虑块的返回值。在一长串方法中插入。点击,检查中间结果是非常有用的
你有
x = foo.map {|x| whatever}.select {|x| whatever}
并且想知道select
在不重新编写大量代码的情况下接收到什么:
x = foo.map {|x| whatever}.tap { |r| p r }.select {|x| whatever}
如果您发现自己经常这样做,您可能希望为其定义一个全局方法:
def tapp
tap do |o|
p o
end
end
要使用,只需将.tapp
附加到表达式:
something_that_is_returned.tapp
或者,如果您想更具表达力,可以定义一个方法
def puts_and_return(r)
puts r
r
end
然后使用
puts_and_return (last statement of method)
或者,如果您想更具表达力,可以定义一个方法
def puts_and_return(r)
puts r
r
end
然后使用
puts_and_return (last statement of method)
是的,行得通。然而,我的问题更一般化。我是否可以复制并粘贴一些东西来放置变量,然后在不考虑任何方法中的变量名的情况下再次设置它,而不考虑该方法使用的变量或设置方式?特别是,有些方法不会以任何方式终止于简单的直接赋值。是的,这是有效的。然而,我的问题更一般化。我是否可以复制并粘贴一些东西来放置变量,然后在不考虑任何方法中的变量名的情况下再次设置它,而不考虑该方法使用的变量或设置方式?特别是,有些方法不会以简单的直接赋值方式终止。为了让R|V清楚,要使用它,您只需“添加”。在所有将被“返回”的语句末尾点击{R|p R}
,返回链将是不间断的,信息量非常大。我想我想知道水龙头和其他的有什么不同。我的意思是,map返回结果。每个都返回原始对象。那是tap做的吗?或者,tap是否更通用?@R\G:。tap
与非常相似。每个,主要区别在于。tap
始终运行块一次,传递原始对象(同时。每个当然会针对对象的内容多次运行块).tap
也可在常规基类对象上使用,而则可使用。每个仅在容器类上可用。因此,.tap
甚至可以在nil
上使用,只是为了让R|V清楚,要使用它,您只需将.tap{R|p R}
添加到所有将被“返回”的语句的末尾,返回链将是不间断的,非常有用。我想我想知道水龙头和其他的有什么不同。我的意思是,map返回结果。每个都返回原始对象。那是tap做的吗?或者,tap是否更通用?@R\G:。tap
与非常相似。每个,主要区别在于。tap
始终运行块一次,传递原始对象(同时。每个当然会多次运行块)