Trong Ruby, tôi đang cố tạo một lớp, dựa trên giá trị được đưa ra trong quá trình khởi tạo sẽ kế thừa từ một trong các mô-đun sau. Tôi muốn tạo ra một mô-đun cơ bản mà cả hai mô-đun này kế thừa từ đó chứa các phương thức chung sử dụng các hằng số được định nghĩa trong các mô-đun kế thừa nó. Ví dụ:Kế thừa hằng số bên trong mô-đun Ruby
module BaseMod
def what_am_i
puts OUTPUT
end
end
module Tall
OUTPUT = "I am tall"
include BaseMod
end
module Short
OUTPUT = "I am short"
include BaseMod
end
class Person
def initialize type
if type =~ /short/i
extend Short
else
extend Tall
end
end
end
p = Person.new "short"
p.what_am_i
Vấn đề của tôi là khi "p.what_am_i" được gọi là tôi nhận được lỗi sau:
NameError: uninitialized constant BaseMod::OUTPUT
const_missing at org/jruby/RubyModule.java:2642
what_am_i at test_logic2.rb:3
(root) at test_logic2.rb:28
Tôi cũng tự hỏi nếu có một cách tốt hơn để đi về việc này.
cách thú vị để làm điều đó. –
@BorisStitnicky tùy thuộc vào những gì bạn muốn xây dựng, một phương pháp có thể có ý nghĩa hơn một biến mẫu. YMMV :) – Trevoke