我有这段代码:
.tap { |m| el(m, 3, 4) { |l, f| puts "Patient: #{l}, #{f}" } }
我需要将值l
和f
分配给变量,然后将其保存到数据库中。
我尝试过这样的事情:
.tap {
m.each do
puts m.inspect
end
}
但这会导致语法错误。
在这种情况下,如何为变量赋值?
提前谢谢。
答案 0 :(得分:2)
您可以将值分配给外部范围中定义的变量,例如:
str = nil
'foo'.tap { |s| str = s }
str #=> "foo"
或使用对象来保存值:
values = {}
'foo'.tap { |s| values[:str] = s }
values #=> {:str=>"foo"}
答案 1 :(得分:0)
虽然您可以直接从外部范围设置变量,但它违反了我所知道的所有良好实践。我会使用专用对象来存储值:
▶ class Test
▷ attr_accessor :foo, :bar
▷ def set(foobar)
▷ @foo, @bar = foobar
▷ end
▷ end
▶ test = Test.new; [42, 3.14].tap(&test.method(:set))
#⇒ [42, 3.14]
▶ test
#⇒ #<Test:0x0055aac1e0b2f0 @bar=3.14, @foo=42>