2014-01-27 83 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

相关问题