我的哈希看起来像:
{:system=>"rr1k1"}
如果我这样做:
puts @var[:system]
看起来像:
systemrr1k1
如何在不执行@ var.each的情况下获取rr1k1?
编辑:
回应以下评论。我的实际变量是从带有续集的db查询设置的,只有一个结果。当我对变量执行put时,它看起来像:
puts @var
#<Sequel::MySQL::Dataset: "select distinct lower(system) as system from client where db = 'CLIENTDB1'">
如果我对它进行循环,我会得到:
@var.each do |x|
p x
end
给我:
{:system=>"rr1k1"}
但是@var [:system]给了我
systemrr1k1
答案 0 :(得分:2)
Sequel::MySQL::Dataset
中有@var
,您可以从puts @var
输出中看到Sequel::MySQL::Dataset
。 []
从Sequel::Dateset
和that method获取[
方法:
- (对象)
DB[:table][:id=>1] # SELECT * FROM table WHERE (id = 1) LIMIT 1 # => {:id=1}
](*条件)返回与条件匹配的第一条记录。例子:
@var[:system]
这意味着puts @var.first[:system]
将为您提供行,而不是单个值。
也许你真的想要:
:system
剥离结果集中的第一行(也是唯一一行),然后将{{1}}值拉出该行。
答案 1 :(得分:0)
您的@var
是Sequel Dataset,Enumerable。要访问您的数据,您必须引用该行或使用.first
,如下所示:
puts @var[0][:system] # "rr1k1"
puts @var.first[:system] # "rr1k1"
由于它是数据集,因此可能还有其他行,因此如果要正确循环每个结果,则必须使用.each
。