0

我可以使用带有class关键字的常量名称创建一个类:

class MyClass1; end

我还可以创建一个类Class.new并将其分配给常量或变量:

MyClass2 = Class.new do; end
myClass3 = Class.new do; end

但我无法使用class名称以小写开头的关键字创建类:

class myclass4; end # => Error

这四个有根本区别吗?不是myclass3普通班吗?

4

2 回答 2

1

类似于安德鲁马歇尔的答案,但也不同。


这样想:

  1. class Foo ...语法不仅仅是定义一个类;除了定义一个类,第一次调用的时候一定要给它命名,并且类名必须是常量。请注意,原则上,一个类可以是无名的(参见#3)。

  2. 另一方面,可以对变量或常量进行赋值。对此没有任何限制。

  3. 创建类的更纯粹的方法是使用Class.new. 使用此语法,您不必命名它。所以可以把它赋值给一个变量:

    foo = Class.new
    # => #<Class:0x007f36b23159a8>
    

    只有当它第一次被分配给一个常量时,它才会被命名:

    Foo = foo
    # => Foo
    
于 2013-07-07T15:39:32.737 回答
1
  • 第一个方法 ( class MyClass; end) 是语言语法的显式部分(其中class是关键字),并且类的名称必须是常量。

  • 第二个方法 ( Class.new) 只是一个普通的方法调用,它返回一个 Class 的匿名实例。然后可以像对待任何其他对象一样对待这个匿名实例。

除此之外,这两种方法之间没有区别。请注意,您仍然可以将第一种类型分配给非常量,但也必须首先将其分配给常量:

class MyClass; end
my_class = MyClass
于 2013-07-07T15:27:32.113 回答