0

我正在阅读一些关于 ruby​​ 中符号的示例,其中一个示例是使用符号来表示州名,例如:Montana

但是,来自 Java,我通常会在这里使用枚举。我喜欢枚举的地方在于你可以对它们进行分组,所以我可以执行以下操作:

枚举州{蒙大拿州,明尼苏达州,...}

然后在Java代码中我可以调用

States.Montana

是否有一种合乎逻辑的方法来对 ruby​​ 中的相关符号进行分组?创建一个包含符号的模块是否有意义?还是在 ruby​​ 中有更惯用的方法来做到这一点?

4

3 回答 3

3

您可能希望为此使用模块。

module States
    MN = "Minnesota"
    WI = "Wisconsin"
end

puts States::MN #=> "Minnesota"

附带说明一下,Ruby 中的“符号”通常指的是Symbol 类,它有点像一个内部字符串。你写一个像:my_symbol. 它们通常用作HashMaps* 中的键。

Hash*不应该HashMap

于 2012-06-22T23:16:54.587 回答
1

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]
于 2012-06-22T23:40:00.420 回答
0

这样做的惯用方法是使用原始符号。只需传递名称的符号,用于downcase允许一些灵活性(可选)并根据有效符号列表验证符号(可选)。

于 2012-06-22T23:11:21.243 回答