Có cách nào để tạo một biến trong một mô-đun trong Ruby hoạt động tương tự như một biến lớp không? Ý của tôi là nó có thể được truy cập mà không cần khởi tạo phiên bản của mô-đun, nhưng nó có thể được thay đổi (không giống như hằng số trong mô-đun).
Có cách nào để tạo một biến trong một mô-đun trong Ruby hoạt động tương tự như một biến lớp không? Ý của tôi là nó có thể được truy cập mà không cần khởi tạo phiên bản của mô-đun, nhưng nó có thể được thay đổi (không giống như hằng số trong mô-đun).
Câu trả lời:
Ruby tự nhiên hỗ trợ các biến lớp trong mô-đun, vì vậy bạn có thể sử dụng trực tiếp các biến lớp chứ không phải một số biến proxy hoặc giả-lớp:
module Site
@@name = "StackOverflow"
def self.setName(value)
@@name = value
end
def self.name
@@name
end
end
Site.name # => "StackOverflow"
Site.setName("Test")
Site.name # => "Test"
defined?(@@foo) => "class variable"
.
@
biến phiên bản duy nhất . Có lý do cụ thể nào để sử dụng các biến lớp không? Cảm ơn vi đa trả lơi.
T.get
và T::get
?
Nếu bạn không cần gọi nó từ bên trong một cá thể, bạn có thể chỉ cần sử dụng một biến cá thể trong thân mô-đun.
module SomeModule
module_function
def param; @param end
def param= v; @param = v end
end
SomeModule.param
# => nil
SomeModule.param = 1
SomeModule.param
# => 1
Biến @param
thể hiện sau đó sẽ thuộc về mô-đun SomeModule
, là một thể hiện của Module
lớp.
bạn có thể đặt một biến cá thể lớp trong mô-đun.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"