ruby - 在 ruby​​ 中,你将相关符号(如 java 中的枚举)放在哪里?

标签 ruby enums symbols

据我了解 Enums in Ruby问题,你使用 Symbols 来代表 ruby​​ 中的东西,而不是 enums 在其他语言如 java 或 C# 中。

当你有枚举时,你可以在一个地方收集相关的标识符,如下所示。从代码中可以看出,有三种颜色可用,paint 方法接受这三个值之一。

enum Color {
  Red,
  Yellow,
  Purple
}
public void paint(Color color) {}

你如何记录ruby中相关符号的可用值?(:red, :yellow, :purple) 你有吗将其放在使用它们的方法的注释中,如下所示?

# allowed colors: :red, :yellow, :purple
def paint(color)
end

最佳答案

通常我会创建一个包含允许符号的常量数组。如果你想确保它不会改变,你可以卡住它。

COLORS = [:red, :green, :blue].freeze

如果你有很多不同的元素,你可以使用%i()语法:

COLORS = %i(red green blue yellow purple).freeze

如果您使用的是 Rails,从 4.1 版本开始就有一个 enum macro可用于 ActiveRecord::Base。

class Car < ActiveRecord::Base
  enum color: %i(red green blue yellow purple)
end

Car.new(color: :red)

关于ruby - 在 ruby​​ 中,你将相关符号(如 java 中的枚举)放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31868908/

相关文章:

ruby - 为什么这个 JSON 文件填充了上次哈希数据的 1747 倍?

ruby-on-rails - 如何将救援 block 移动到方法

javascript - 这个片段中的这个是什么?

c - 在 Mac OS X 上以编程方式枚举动态库中的符号

ruby - Lookahead 包含与左/右 anchor 相同的标记

ruby - 对实例变量范围、顶级与类感到困惑

java - 如何迭代 Java 枚举?

java.sql.SQLException : Data truncated for column 异常

java - 使用通配符 Class<?> 从枚举类中检索枚举

unicode - Unicode 通用类别中的 GC=Mark 和 GC=Punctuation 有什么区别?