我正在阅读一些关于 ruby 中符号的示例,其中一个示例是使用符号来表示州名,例如:Montana
但是,来自 Java,我通常会在这里使用枚举。我喜欢枚举的地方在于你可以对它们进行分组,所以我可以执行以下操作:
枚举州{蒙大拿州,明尼苏达州,...}
然后在Java代码中我可以调用
States.Montana
是否有一种合乎逻辑的方法来对 ruby 中的相关符号进行分组?创建一个包含符号的模块是否有意义?还是在 ruby 中有更惯用的方法来做到这一点?
您可能希望为此使用模块。
module States
MN = "Minnesota"
WI = "Wisconsin"
end
puts States::MN #=> "Minnesota"
附带说明一下,Ruby 中的“符号”通常指的是Symbol 类,它有点像一个内部字符串。你写一个像:my_symbol
. 它们通常用作HashMap
s* 中的键。
Hash
*不应该HashMap
。
I'd use an array of symbols or strings:
states = [:Montana, :Minnesota, ...]
states.each { |s| puts s } # print one state each line
puts *states # another way to do the same
For that example is worth to say that puts
converts the argument(s) into string(s); so you can safely use symbols with it. I think the symbols are more useful if you don't intend display or manipulate them; else you may want to use strings.
A case where symbols are useful is for indexing a Hash
:
states = { :montana => 'beautiful', :minnesota => 'wonderful', ... }
puts states[:washington]
这样做的惯用方法是使用原始符号。只需传递名称的符号,用于downcase
允许一些灵活性(可选)并根据有效符号列表验证符号(可选)。