2015-07-21 46 views
4

我不明白以下代码段中的Sheep = Class.new部分。什么是“Class.new”?

module Fence 
    Sheep = Class.new do 
    def speak 
     "Bah." 
    end 
    end 
end 

def call_sheep 
    Fence::Sheep.new.speak 
end 

它到底在做什么?

+2

@Praveen_Shukla我已经将您的评论纳入问题。提问时请具体说明。 – Stefan

+1

“Class.new”是另一种定义类的方法。 http://blog.rubybestpractices.com/posts/gregory/anonymous_class_hacks.html ---请在提问时更具体。 – Akshay

+0

它取消引用常量'Class',将消息'new'发送给结果对象,并将结果赋给常量'Sheep'。你的问题真的不清楚。你需要哪些部分帮助?你知道发送的信息是什么吗?你明白常数是什么吗?你明白什么是任务吗? –

回答

9

根据文档,Class.new

创建一个新的匿名(未命名)与给定的超类(或Object如果未指定参数)。

此外,

可以通过分配类对象,以恒定的给一个类的名称。

Sheep是恒定的,所以你的代码就相当于:

module Fence 
    class Sheep 
    def speak 
     "Bah." 
    end 
    end 
end 
3
Sheep = Class.new do 
    def speak 
    "Bah." 
    end 
end 

Class.new是关于Ruby定义类的语法。以上代码是类似如下:

class Sheep 
    def speak 
    "Bah." 
    end 
end