Ruby 类别与类别新、模块与模块新
Ruby 类别与类别新、模块与模块新,ruby,Ruby,class和class.new和模块和模块.new之间有什么区别 我知道: 类。新建/模块。新建创建一个匿名的类/模块。当我们第一次将它赋给常量时,它就成为该类/模块的名称类/模块自动执行此操作 当我们想要继承时,我们可以传递一个参数:Class.new(祖先)。当我们不指定祖先时,它被设置为对象类使用以下语法:类A
class
和class.new
和模块
和模块.new
之间有什么区别
我知道:
类。新建
/模块。新建
创建一个匿名的类
/模块
。当我们第一次将它赋给常量时,它就成为该类
/模块
的名称<代码>类/模块
自动执行此操作Class.new(祖先)
。当我们不指定祖先时,它被设置为对象
<代码>类使用以下语法:类A<祖先
Class.new
返回一个对象
<代码>A类返回nil
。模块
s也是如此我遗漏了什么吗?在
class
关键字和-class::new
接受块之间,您遗漏了有趣的一点。因此,当您使用class::new
创建类对象时,还可以访问周围的变量。因为阻塞是闭合的。但是,当您使用关键字class
创建类时,这是不可能的。因为class
创建了一个全新的范围,它不了解外部世界。让我举几个例子
这里我使用关键字class
创建一个类:
count = 2
class Foo
puts count
end
# undefined local variable or method `count' for Foo:Class (NameError)
这里有一个使用类。新的:
count = 2
Foo = Class.new do |c|
puts count
end
# >> 2
关键字模块
和也有同样的区别
Class.new
返回一个对象
<代码>A类
返回nil
。模块
s也是如此
那是错误的。类/模块定义返回在类/模块主体内计算的最后一个表达式的值:
class Foo
42
end
# => 42
通常,在类/模块主体内部计算的最后一个表达式将是一个方法定义表达式,在Ruby的当前版本中,该表达式返回一个符号
,表示方法的名称:
class Foo
def bar; end
end
# => :bar
在较早版本的Ruby中,方法定义表达式的返回值是由实现定义的。Rubinius为所讨论的方法返回了一个CompiledMethod
对象,而YARV和大多数其他人只是返回nil
,在Ruby的当前版本中,它返回一个符号
,表示方法的名称——我不知道。谢谢你提供的信息。您在哪个版本中找到此功能。我现在是1.9。3@ArupRakshit:2.0或2.1,不确定。我在2.1上已经有一段时间了,所以我记不清了。但是,它在发行说明中有记录。请参阅更多信息。。。。。。。。。。。