2013-10-10 129 views
0

哈希创建期间是否可以将字符串转换为符号?也就是说,如果我有一个字符串application_id,并且我想要创建一个散列值:application_id => '1234A',我该怎么做?字符串到哈希中的符号

我试过做一些像application_id.to_sym => id但这不起作用。

编辑:我试图使它在一个函数中工作。我的功能声明是这样的:

def merge(external_id, id, opts) 
    connection.upsert(external_id, external_id.to_sym => id, opts) 
end 

我会通过做merge('application_id', '1234A', {FirstName: 'John', LastName: 'Smith'})来调用它。

不幸的是,这给我的错误是它期望=>而不是)

+0

'application_id.class#=> String' – josh

+0

这应该做工精细,而且是正常的方式来做到这一点。向我们展示它“无法工作”的代码,以便我们确认问题。 –

+0

我用我试图使用的特定代码更新了我的问题。 – josh

回答

2

可以字符串转换为符号:

'application_id'.to_sym => id 
0

听起来像是你正在寻找一种方式来做到这一点的地方

id = 5 
bar = "foo" 
{ 
    :"#{bar}" => id 
} 

回报

{:foo => 5} 

,所以你可以做

{ :"#{'application_id'}" => id } 
+0

这是非常不雅和非惯用的。如果您使用'to_sym':''foo bar'.to_sym#=>:“foo bar”',Ruby将自动处理在双引号内嵌入坏符号名称。 “foo”和“application_id”都是有效的符号名称,不需要双引号就可以工作,所以不要浑水:''foo'.to_sym#=>:foo'和''application_id'.to_sym#=> :application_id'。 –

+0

当然,他们都工作,但我不明白为什么它如此强烈地打破了你的优雅感。上面的例子有点荒谬,但我没有看到任何错误定义这样的符号':“#{first_name} _#{last_name }''而不是''#{first_name} _#{last_name}“。to_sym' –

+0

或'[first_name,last_name] .join('_')。to_sym'让Ruby决定是否需要包装双引号? 'application_id'已经是一个字符串,所以不需要将它插入到另一个字符串中,只是为了让它插入到双引号中。 Ruby会使用'to_sym'来做正确的事情,所以不需要跳过这些循环。 –

1
h = {} 
str = "application_id" 
h[str.to_sym] = "1234A" 
p h # => {:application_id=>"1234A"} 
0

要可想而知只是

connection.merge(application_id: '1234A', FirstName: 'John', LastName: 'Smith').