Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中声明模块中的函数_Ruby - Fatal编程技术网

如何在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