Oop 可以在Scala中进行基于原型的编程吗?

Oop 可以在Scala中进行基于原型的编程吗?,oop,scala,prototype,Oop,Scala,Prototype,有可能在Scala中进行基于原型的编程吗?虽然我同意EasyAngel的观点,但根据您希望如何使用原型机制,您可以使用Scala机制实现类似的目标。例如,您可以定义一个可以混合到更通用类中的特征 在某些方面,这比原型对象生成更强大,因为您可以混合和匹配各种潜在的相关特性。您还可以在目标子类中自定义和扩展它们 进一步澄清你的问题将使答案更加集中。我不同意Easy Angel。。。Scala对象不需要类(它们仍然都有一个类型…但这是不同的)。它完全可以写 val martin = new {

有可能在Scala中进行基于原型的编程吗?

虽然我同意EasyAngel的观点,但根据您希望如何使用原型机制,您可以使用Scala机制实现类似的目标。例如,您可以定义一个可以混合到更通用类中的特征

在某些方面,这比原型对象生成更强大,因为您可以混合和匹配各种潜在的相关特性。您还可以在目标子类中自定义和扩展它们


进一步澄清你的问题将使答案更加集中。

我不同意Easy Angel。。。Scala对象不需要类(它们仍然都有一个类型…但这是不同的)。它完全可以写

val martin = new { 
  val name = "Martin"
  val surname = "Ring"
  def age = Calendar.getInstance.get(Calendar.YEAR) - 1986
}
此外,由于结构类型,您可以为这些对象编写函数:

def printPerson(person: { def name: String; def age: Int }) = 
  println("%s (%d)".format(person.name, person.age))
您可以调用
printPerson(martin)
,它将打印出
martin(25)

所以,如果你真的想要的话,就不需要课程或特质


但是,该语言仍然不支持基于原型的编程,因为它(imho)无法克隆和扩展匿名类型的对象。我想你可以写函数来实现这一点。。。但是它们需要大量使用反射,因此没有本地语言支持。

您的问题不清楚。你能更准确地描述一下你的问题吗?若你们想知道Scala是基于原型的语言,比如Io还是JavaScript,那个么答案是否定的。在Scala中,你们有一些类是新对象的蓝图,它们是必需的。因此,没有这样的蓝图,就无法创建对象。在我看来,基于原型的语言的大部分功能来自于缺少类。我认为这个有趣的InfoQ视频与这个主题相关:。我认为(它也可以被称为动态mixin)在这种情况下更合适。我很欣赏这个演示和软件描述。然而,在海事组织,我们两者都需要。理想(抽象)类型化和原型(经验)概括都有助于概念(和表征)经济。一个人的缺席对另一个人的贡献有什么影响?谁是容易的天使?