如何在ruby中声明模块中的函数
在下面的代码中,以不同的方式声明两个方法有什么区别。第二种方法是使用如何在ruby中声明模块中的函数,ruby,Ruby,在下面的代码中,以不同的方式声明两个方法有什么区别。第二种方法是使用Week声明的,但第一种方法是在不使用Week的情况下声明的。我们也无法通过类对象d1访问第二个方法。它给出了错误 undefined method `weeks_in_year' for #<Decade:0x2c08a28> (NoMethodError) 您定义方法weeks\u in_year的方式是Week类的类方法,而不是实例方法。这就是为什么它没有被继承,而您在发布时得到了错误 可以使用来使用与类方法
Week
声明的,但第一种方法是在不使用Week
的情况下声明的。我们也无法通过类对象d1
访问第二个方法。它给出了错误
undefined method `weeks_in_year' for #<Decade:0x2c08a28> (NoMethodError)
您定义方法
weeks\u in_year
的方式是Week
类的类方法,而不是实例方法。这就是为什么它没有被继承,而您在发布时得到了错误
可以使用来使用与类方法或实例方法相同的方法
module Week
def weeks_in_month
puts "You have four weeks in a month"
end
def weeks_in_year
puts "You have 52 weeks in a year"
end
module_function :weeks_in_year
end
class Decade
include Week
def wrapper_of_weeks_in_year
weeks_in_year
end
end
d1 = Decade.new
d1.weeks_in_month
# You have four weeks in a month
d1.wrapper_of_weeks_in_year
# You have 52 weeks in a year
Week.weeks_in_year
# You have 52 weeks in a year
当您将使用模块_函数
时,实例方法版本是私有的。这就是为什么您需要使用包装器方法来调用它,因为直接调用是不可能的
module Week
def weeks_in_month
puts "You have four weeks in a month"
end
def weeks_in_year
puts "You have 52 weeks in a year"
end
module_function :weeks_in_year
end
class Decade
include Week
def wrapper_of_weeks_in_year
weeks_in_year
end
end
d1 = Decade.new
d1.weeks_in_month
# You have four weeks in a month
d1.wrapper_of_weeks_in_year
# You have 52 weeks in a year
Week.weeks_in_year
# You have 52 weeks in a year