Để 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.
Để 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.
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
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
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
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
Bạn có nghĩa là * Lớp biến * '@@ arr' hoặc * dụ biến *' @ arr'? – maerics
Trong Ruby, có 'initialize' được gọi là' MyClass.new'. – Reactormonk
"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. –