首先,这不是中Enums的重复:)
这个问题的公认答案表明,这是表示Ruby中枚举的好方法:
class Foo
BAR = 1
BAZ = 2
BIZ = 4
end
在Java中,可以将多个值和方法附加到枚举值。我想在Ruby中实现相同或相似的东西。
代表此Java枚举的最类似于Ruby的方式是什么:
public enum Enum
VALUE_1("Value 1"),
VALUE_2("Value 2"),
VALUE_3("Value 3");
Enum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
private String value;
}
编辑:
我还想保留Java枚举的隐式功能:
例子:
Enum.VALUE_1.getValue(); // "Value 1"
Enum.VALUE_2.name(); // "VALUE_2"
Enum.VALUE_3.ordinal(); // 2
class MyEnum
attr_accessor :value
def initialize(value)
@value = value
end
VALUE1 = new("Value 1")
VALUE2 = new("Value 2")
class << self
private :new
end
end
MyEnum::VALUE2 # Enum with value "Value 2"
MyEnum.new # Error
一个更精细的解决方案,它允许您定义任意的“枚举类”,并为您提供ordinal()
:
def enum(*values, &class_body)
Class.new( Class.new(&class_body) ) do
attr_reader :ordinal
def initialize(ordinal, *args, &blk)
super(*args, &blk)
@ordinal = ordinal
end
values.each_with_index do |(name, *parameters), i|
const_set(name, new(i, *parameters))
end
class <<self
private :new
end
end
end
# Usage:
MyEnum = enum([:VALUE1, "Value 1"], [:VALUE2, "Value 2"]) do
attr_reader :str
def initialize(str)
@str = str
end
end
MyEnum::VALUE1.str #=> "Value 1"
MyEnum::VALUE2.ordinal #=> 1
Ruby、Rails 高级技巧 ActiveJob / 异步队列 Sidekiq 精通 36 分钟 Rails 4.2 中 ActiveJob 的使用 Sidekiq:导致 Frozen Worker 的两个风险 Rails 中用 RabbitMQ 做消息队列【译】 ActiveSupport 利用 ActiveSupport::Notifications 在 Rails 中实现 PUB/SUB
问题内容: 我有一个枚举的类对象(我有一个),我需要获取此枚举表示的枚举值的列表。该静态函数有我需要什么,但我不知道怎么去从类对象访问它。 问题答案:
Rust 的类型系统有一些我们曾经提到但没有讨论过的功能。首先我们从一个关于为什么 newtype 与类型一样有用的更宽泛的讨论开始。接着会转向类型别名(type aliases),一个类似于 newtype 但有着稍微不同的语义的功能。我们还会讨论 ! 类型和动态大小类型。 这一部分假设你已经阅读了 “高级 trait” 部分的 newtype 模式相关内容。 newtype 模式可以用于一些其
交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性。 例如,Person & Serializable & Loggable同时是Person和Serializable和Loggable。 就是说这个类型的对象同时拥有了这三种类型的成员。 我们大多是在混入(mixins)或其它不适合典型面向对象模型的地方看到交叉类型的使用。 (在
视界(“类型类”) 有时候,你并不需要指定一个类型是等/子/超于另一个类,你可以通过转换这个类来伪装这种关联关系。一个视界指定一个类型可以被“看作是”另一个类型。这对对象的只读操作是很有用的。 *隐式*函数允许类型自动转换。更确切地说,如果隐式函数有助于满足类型推断时,隐式函数可以按需地应用。例如: scala> implicit def strToInt(x: String) = x.toInt
我有一个类,其中可能有几个枚举 每个枚举都应该有一个与每个条目关联的字符串值。为了实现这一点,我添加了一个参数化构造函数,一个支持字符串类的成员,并重写了toString方法。 然而,可以看到我的两个枚举之间的50%的代码是相同的。它只是支持将字符串映射到Enum值的代码。 如何将此代码移动到公共位置并避免代码重复? 编辑:当我写《美国》时,用例是很容易获得“纽约”。国家。纽约。 以下是我尝试的,