【发布时间】:2012-12-26 03:13:17
【问题描述】:
就这么简单
c = :cat
c.to_s
puts c.class
给我符号,并且
c = "cat"
c.to_sym
puts c.class
给出字符串。我使用的 Ruby 是 1.9.3,文档说这应该将符号转换为字符串,并将字符串转换为符号。可能有什么问题?
【问题讨论】:
就这么简单
c = :cat
c.to_s
puts c.class
给我符号,并且
c = "cat"
c.to_sym
puts c.class
给出字符串。我使用的 Ruby 是 1.9.3,文档说这应该将符号转换为字符串,并将字符串转换为符号。可能有什么问题?
【问题讨论】:
尝试:
c = :cat
c = c.to_s
puts c.class # "String"
c = "cat"
c = c.to_sym
puts c.class # "Symbol"
【讨论】:
to_s 和 to_sym 不会改变原始变量,而是返回一个值。你需要用.to_s在链中调用.class。
c = :cat
c.to_s.class
# "String"
c = "cat"
c.to_sym.class
# "Symbol"
如果你想转换一个新的变量,你必须给它赋值。
c = "cat"
d = c.to_sym
puts d.class
# d is a symbol
# "Symbol"
【讨论】:
to_s 和 to_sym 返回新值,它们不转换变量。
【讨论】: