【发布时间】:2016-01-30 16:39:28
【问题描述】:
我想在 R 中创建类,假设它是一个人的 S4 类。例如
setClass("Person", slots = list(name = "character", mood = "myMoodType"))
现在我想创建myMoodType 是一个抽象类型,它只能接受三个值“快乐”、“悲伤”和“未知”。
我知道我可以使用 S4 类的有效性来做到这一点,并将心情作为字符类型,并通过验证提供的字符串是我列出的三个选项之一来检查有效性。但我想知道我是否可以定义一个抽象类型,比如在 julia 中,例如
abstract myMoodType
type Happy <: myMoodType end
type Sad <: myMoodType end
type Unknown <: myMoodType end
在 R 中处理这个问题的正确方法是什么?
【问题讨论】:
-
在我看来,两种语言的更好解决方案是将
myMoodType声明为Enum,具有Happy 、Sad 和Unknown 3 个值 -
你嫁给了 S4 吗?一般而言,这不是一个经过深思熟虑的 OOP 机制——我建议使用 S3 或 R6 来代替,并忘记 S4 曾经存在过。也就是说,S3 和 R6 在这方面都不会真正为您提供帮助,而且实际上大多数语言中的大多数 OOP 实现都不支持您想要实现的目标(称为 sum types)。
-
感谢您的参考。我只是以 S4 为例。
-
考虑您是否真的想要一个名为“未知”的可能级别,因为 R 已经使用
NA来标记缺失的信息。 -
@Backlin ... 和
NULL,和NaN,和NA_character_,和NA_real_,和...... ;-)
标签: r julia s4 abstract-data-type