我有这个类Callback
来充当自定义attr_accessor
module Callback
def add_callback(name)
define_method(name) do
instance_variable_get("@#{name.to_s}")
end
define_method("#{name.to_s}=") do |value|
instance_variable_set("@#{name.to_s}", value)
end
end
end
我确实将该类包含在主类中
require_relative "./callback"
class TaskManager
include Callback
add_callback :on_start, :on_finished, :on_error
def initialize; end
end
但是当我在irb中需要它时,我得到了未定义的方法错误
require "./task_manager.rb"
irb(main):003:0> require "./task_manager.rb"
/Users/task_manager.rb:9:in `<class:TaskManager>': undefined method `add_callback' for TaskManager:Class (NoMethodError)
两个文件已在同一文件夹中
2条答案
按热度按时间6jygbczu1#
您不需要显式地使用getter和setter,Ruby中有
attr_accessor
如果您的
initialize
为空,则可以忽略它第一个
顺便说一句,你也不需要使用
to_s
对象字符串插值(它将自动应用)在你的"@#{name.to_s}"
2vuwiymt2#
你可以解决如下问题
当您将一个模块
include
到一个类中时,该模块方法将作为示例方法导入。但是,当您将一个模块
extend
到一个类中时,该模块方法将作为类方法导入。也请看一下下面的答案了解更多详情
What is the difference between include and extend in Ruby?
需要使用可变数量的参数,如下所示
因为调用方法时使用了多个参数