2013-10-10 128 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').