我正在尝试进行条件分配:
entries = (@instance_1 || @instance_2)
如果@instance_1
为零,我希望将@instance_2
分配给entries
。在这种情况下,我知道其中一个会有一个值。
但是,我遇到@instance_1
为零的问题,而@instance_2
有一个值,但@instance_1
正在分配中使用。
我接近这个错误吗?
这是在Rails应用程序的上下文中。我从Pry中删除了一些数据,所以你可以看到它是如何反应的:
以下是Pry声明发生的地方:
entries = (@time_entry || @times_entries)
binding.pry
现在,entries
:
[1] pry(#<TimelogController>)> entries
=> nil
@time_entry
的价值:
[2] pry(#<TimelogController>)> @time_entry
=> nil
@time_entries
的价值:
[3] pry(#<TimelogController>)> @time_entries
=> [#<TimeEntry:0x00000006f6f878
id: 1838,
project_id: 10,
user_id: 8,
issue_id: 1481,
hours: 1.0,
comments: "hey now",
activity_id: 9,
spent_on: Fri, 20 Nov 2015,
tyear: 2015,
tmonth: 11,
tweek: 47,
created_on: Fri, 20 Nov 2015 20:07:06 UTC +00:00,
updated_on: Fri, 20 Nov 2015 20:07:06 UTC +00:00,
freshbooks_time_entry: nil>]
所以在这种情况下,它返回nil,即使第二个参数(@time_entries)
有一个值。
答案 0 :(得分:3)
一个说@time_entries,另一个说@times_entries
entries = (@time_entry || @times_entries)
VS
[3] pry(#<TimelogController>)> @time_entries
如果您将其更改为
entries = (@time_entry || @time_entries)
它应该有用
答案 1 :(得分:1)
irb会议记录:
irb(main):001:0> @i1 = nil
=> nil
irb(main):002:0> @i2 = 3
=> 3
irb(main):003:0> a = (@i1 || @i2)
=> 3
irb(main):004:0> a = @i1 || @i2
=> 3
您描述的问题无法再现
编辑: 我看到你的编辑了。所以,让我帮你提供一个完整的例子:
class TimeEntry
end
@time_entry = nil
@time_entries = [TimeEntry.new]
entries = (@time_entry || @times_entries)
p entries
p @time_entry
p @time_entries
是的,这会输入nil作为条目的值。现在我可以重现,但还没有解释。相反,我对此感到困惑。我用来执行这个例子的ruby版本是ubuntu 14.04上的1.9.3p484
与ruby 2.0.0p384相同的奇怪结果。示例skript打印
nil
nil
[#<TimeEntry:0x000000020fcd58>]
然而,我希望第一行与第三行相同。
编辑:Dane Anderson发现了这个错字。如果你从一开始就提供了一个完整的例子,有人可能会早些发现它。
答案 2 :(得分:0)
这适用于任意数量的元素:
With ws.Shapes(myImg.ID)
PicHeight = .Height
PicWidth = .Width
End With
答案 3 :(得分:0)
您所描述的内容不可能是:
(true || nil) # => true
(nil || true) # => true
(true || false) # => true
(false || true) # => true
那是出于Pry。
复制你给我们的内容:
require 'date'
class TimeEntry
def initialize
@id = 1838
@project_id = 10
@user_id = 8
@issue_id = 1481
@hours = 1.0
@comments = "hey now"
@activity_id = 9
@spent_on = Date.parse('Fri, 20 Nov 2015')
@tyear = 2015
@tmonth = 11
@tweek = 47
@created_on = DateTime.parse('Fri, 20 Nov 2015 20:07:06 UTC +00:00')
@updated_on = DateTime.parse('Fri, 20 Nov 2015 20:07:06 UTC +00:00')
@freshbooks_time_entry = nil
end
end
@time_entry = nil
@time_entries = [TimeEntry.new]
entries = (@time_entry || @time_entries) # => [#<TimeEntry:0x007f853991dfc8 @id=1838, @project_id=10, @user_id=8, @issue_id=1481, @hours=1.0, @comments="hey now", @activity_id=9, @spent_on=#<Date: 2015-11-20 ((2457347j,0s,0n),+0s,2299161j)>, @tyear=2015, @tmonth=11, @tweek=47, @created_on=#<DateTime: 2015-11-20T20:07:06+00:00 ((2457347j,72426s,0n),+0s,2299161j)>, @updated_on=#<DateTime: 2015-11-20T20:07:06+00:00 ((2457347j,72426s,0n),+0s,2299161j)>, @freshbooks_time_entry=nil>] # !> assigned but unused variable - entries