2014-01-27 117 views
0

是否有DRYer方法將名爲:comma的符號轉換爲實際的逗號(,)?將符號:逗號轉換爲','

電流的方法:

> delimiters = {:comma =>",", :semicolon=>";"} 
=> {:comma=>",", :semicolon=>";"} 

> chosen = :comma 

> delimiters[chosen] 
=> "," 

理想:

> x = :comma 
=> :comma 

> x.from_sym # not valid, obviously 
=> "," 
+1

較短?不是沒有什麼可怕的和駭人聽聞的。你真的只是要求一個比hash [key]'更短的訪問一個項目的方法,這個方法不存在,而且真的不可取。你可以用一個方法把它包裝起來,並編寫'delimiter_to_s(:comma)=>',''但真的,這樣做更短是不可取的,它就像DRY一樣。 – meagar

+0

當然除了如何做,它使用散列(或地圖,因爲它是在某些語言中提到) – bjhaid

+0

如果這些答案中的任何回答你的問題,請將它們標記爲正確 – snowe

回答

1

號符號是等於它的字符串表示,但沒有其他隱藏的意義或變換。這與'2' != 2 != :'2'完全相同,儘管在這種情況下您可以使用to_i進行一些鑄造。

您實際上可以使用逗號的符號表示形式,但我不確定它使代碼更具可讀性。

2.0.0-p353 :011 > var = :',' 
=> :"," 
2.0.0-p353 :012 > var.class 
=> Symbol 
2.0.0-p353 :013 > var.to_s 
=> "," 
4

你可以這樣做,但我不會推薦它。解決方案是猴子補丁的Symbol類給你你想要的功能。 THIS IS不是一個好主意

class Symbol 
    DELIMITERS = {comma: ",", semicolon: ";"} 

    def from_sym 
    DELIMITERS[self] 
    end 
end 

irb(main):015:0> chos = :comma 
=> :comma 
irb(main):016:0> chos.from_sym 
=> "," 
比`定界符[選擇]`
+0

猴子修補這樣一個標準庫實施,與其他圖書館發生衝突的風險很高,這絕不是一個好主意。 –

+0

正如我在所有大寫的帖子中所說的。但他問是否可行以及如何,我給了他答案和警告。 – snowe

相關問題