gpt4 book ai didi

ruby - 如何在ruby中的模块中声明函数

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:30 24 4
gpt4 key购买 nike

在下面的代码中,以不同方式声明两个方法有什么区别。第二种方法是使用 Week 声明的,但第一种方法是在未使用 Week 的情况下声明的。而且我们也无法通过类对象 d1 访问第二个方法。它给出了错误

undefined method `weeks_in_year' for #<Decade:0x2c08a28> (NoMethodError)

那么在第二个方法中使用 Week 前缀声明方法有什么用,当它没有用时。

module Week
def weeks_in_month
puts "You have four weeks in a month"
end
def Week.weeks_in_year
puts "You have 52 weeks in a year"
end
end

class Decade
include Week
end

d1=Decade.new
d1.weeks_in_month
d1.weeks_in_year

最佳答案

您定义方法 weeks_in_year 的方式是 Week 类的类方法,而不是实例方法。这就是为什么它没有被继承并且您在发布时收到错误的原因。

您可以使用 module_function使用与类方法或实例方法相同的方法。

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_function,但实例方法版本是私有(private)的。这就是为什么您需要使用包装器方法来调用它,因为无法直接调用。

关于ruby - 如何在ruby中的模块中声明函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32121433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com