2011-12-05 111 views
5

为了问类似:Ruby中的布尔方法?

MyClass::create().empty? 

我怎么会内MyClass的设立empty

空(真/假)取决于类变量@arr是否为空。

+3

你的意思是*类变量*'@@ arr'或*实例变量*'@ arr'? – maerics

+3

在Ruby中,有'initialize'被'MyClass.new'调用。 – Reactormonk

+2

“在Ruby中,有被MyClass.new调用的初始化”。同意。在Ruby中遵循这一点是很好的;当你有你的Ruby拖鞋时,坚持黄砖路。 –

回答

7

问号实际上是方法名称的一部分,所以你可以这样做:

class MyClass 

    def empty? 
    @arr.empty? # Implicitly returned. 
    end 

end 
2

正是我在过去后表现出相同的,但使用不同的方法名。

首先,create必须用empty?方法返回一些东西。例如:

class MyClass 
    def self.create 
    [] 
    end 
end 

如果你想被按你的最后一个问题上的MyClass实例操作:

class MyClass 
    def self.create 
    MyClass.new 
    end 

    def initialize 
    @arr = [] 
    end 

    def empty? 
    @arr.empty? 
    end 

    def add x 
    @arr << x 
    self 
    end 
end 

这里MyClass作为围绕一个数组的简单包装,提供add方法。

pry(main)> MyClass.create.empty? 
=> true 
2

您可能还需要检查@arr是否为零。这取决于你的空类定义。

def empty? 
    [email protected] || @arr.empty? 
end 
0

你可以使用Forwardable委托从你的类empty?到数组:

require "forwardable" 
class MyClass 
    extend Forwardable 
    def_delegators :@arr, :empty? 

    def initialize(arr) 
    @arr = arr 
    end 
end 

my_object = MyClass.new([]) 
my_object.empty? # => true