Tôi có một lớp đơn giản, khi khởi tạo, phải mất từ một đến tám tham số. Nó thiết lập các accessors để sử dụng sau này. Rubocop đang cố gắng bắt tôi vì ABC quá cao, nhưng tôi không chắc là có gì sai với những gì tôi đã làm hay không. Đây có phải là trường hợp tôi chỉ vô hiệu hóa việc kiểm tra khi khởi tạo của tôi không?Chi nhánh chuyển nhượng Điều kiện quá cao
class Foo
attr_accessor :one, :two, :three, :four
attr_accessor :five, :six, :seven, :eight
def initialize(p={})
@one = p[:one] if p[:one].present?
# ...
@eight = p[:eight] if p[:eight].present?
end
end
suy nghĩ duy nhất của tôi về việc giảm kích thước sẽ phải làm một cái gì đó giống như lặp qua tất cả attr_accessors tôi trên initialize, nhìn thấy nếu có một biểu tượng tương ứng đi qua trong có, và nếu như vậy gán cho nó.
class Foo
attr_accessor :one, :two, :three, :four
attr_accessor :five, :six, :seven, :eight
def initialize(p={})
instance_variables.each do |variable|
send("@#{variable}") = p["#{send(variable)}".to_sym] if p["#{send(variable)}".to_sym].present?
end
end
end
Nhưng điều này có vẻ yếu.
Điều này có vẻ tương tự như những gì tôi đang nghĩ có thể là cảnh sát. Pun dự định. Trong khi tôi đồng ý đây là một cách để giải quyết vấn đề, có một tài liệu tham khảo bạn có thể chỉ cho tôi để tôi có thể đọc thêm về lý do tại sao đây là cách 'đúng'? Cảm ơn vì đã dành thời gian trả lời! – CarlyL
@CarlyL Về đúng cách - Ruby là ngôn ngữ rất linh hoạt, vì vậy mọi thứ có thể được thực hiện theo nhiều cách khác nhau. Và thường là "đúng cách" là vấn đề sở thích cá nhân. Tôi nghĩ bạn có thể đọc qua Hướng dẫn về phong cách Ruby để xem điều gì không ** làm, nhưng tôi nghi ngờ một người nào đó sẽ yêu cầu quyền sở hữu 100% :) –
Bạn cũng có thể đặt tên của các thuộc tính trong một mảng được cố định, như '' 'ATTR_NAMES =% i (một hai ba bốn năm sáu bảy tám) .freeze''' liên tục và gọi' '' attr_accessor (* ATTR_NAMES) '' ' –