2011-12-05 30 views
5

Để hỏi cái gì đó như:Các phương thức Boolean trong Ruby?

MyClass::create().empty? 

Làm thế nào tôi sẽ thiết lập empty trong MyClass?

Trống (đúng/sai) tùy thuộc vào việc biến lớp học @arr có trống hay không.

+3

Bạn có nghĩa là * Lớp biến * '@@ arr' hoặc * dụ biến *' @ arr'? – maerics

+3

Trong Ruby, có 'initialize' được gọi là' MyClass.new'. – Reactormonk

+2

"Trong Ruby, có khởi tạo được gọi là MyClass.new". Đã đồng ý. Và thật tốt khi làm theo điều đó trong Ruby; Dính vào con đường gạch vàng khi bạn có đôi dép Ruby của mình. –

Trả lời

7

Dấu chấm hỏi thực sự là một phần của tên phương pháp, do đó bạn sẽ làm điều này:

class MyClass 

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

end 
2

Chính xác giống như tôi đã giới thiệu trong bài viết trước, nhưng với một tên phương pháp khác nhau.

Trước tiên, create phải trả lại nội dung nào đó với phương thức empty?. Ví dụ:

class MyClass 
    def self.create 
    [] 
    end 
end 

Nếu bạn muốn được hoạt động trên các trường hợp MyClass theo câu hỏi cuối cùng của bạn:

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 

Đây MyClass hoạt động như một wrapper đơn giản xung quanh một mảng, cung cấp một phương pháp add.

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

Bạn cũng có thể cần kiểm tra xem @arr có phải là không. Điều này phụ thuộc vào định nghĩa lớp học của bạn trống.

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

Bạn có thể sử dụng Forwardable ủy empty? từ lớp học của bạn để mảng:

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 
Các vấn đề liên quan