我有这个描述类型的 preudo 代码
type MyType1 = {
type: :type1,
field1: number,
field2: any
} | {
type: :type2,
field3: string
} | {
type: :type4,
field4: SomeOtherType
} | {
type: :type5,
field5: string,
field6: integer,
field7: float
} | {
type: :type6
}
我在 Ruby 中是这样表达的:
class MyType1
attr_reader :type, :field1, :field2, :field3, :field4, :field5, :field6, :field7
def init_with_type_1(field1:, field2:)
@type = :type1
@field1 = field1
@field2 = field2
end
def init_with_type_2(field3:)
@type = :type2
@field3 = field3
end
# and so on...
end
有没有更好、更惯用、更简单的方法?
我不考虑使用第三方 gems 和库。