我正在try 使用Ruby模块(mixin).

我有考试.rb:

#!/usr/bin/env ruby
require_relative 'lib/mymodule'

class MyApp
  include MyModule
  self.hallo
end

和lib/mymodule.rb:

module MyModule
  def hallo
    puts "hallo"
  end
end

设置非常简单.但它不起作用:(:

ruby test.rb
test.rb:8:in `<class:MyApp>': undefined method `hallo' for MyApp:Class (NoMethodError)
        from test.rb:6:in `<main>'

我的错误在哪里?

推荐答案

简而言之:你需要在模块中输入extend而不是include.

class MyApp
  extend MyModule
  self.hallo
end

include为混合它的类提供实例方法.

extend为混合它的类提供类方法.

this遍.

Ruby相关问答推荐

我可以在Ruby中以散列的形式访问方法的关键字参数吗?

ruby:比较两个单词并从中提取不常见的字母

定义Struct时如何指定成员的类型?

Ruby 3 从多个预定纤程中收集结果

如何从外部获取给定 lambda 的参数值,而不显式返回其绑定?

在 Ruby 中,如何编写一个可以与 &:symbol 一起使用的简单方法?

define_method:如何动态创建带参数的方法

Ruby 中有内置的二进制搜索吗?

在 Ruby 中覆盖 == 运算符

Ruby:将unix时间戳转换为日期

如何正确截断表格?

我如何 expect期望在 RSpec 中引发异常的东西?

可可豆荚安装在iOS项目上不起​​作用

Ruby Koan 151 引发异常

Ruby中block和&block的区别

Ruby 删除目录

如何判断变量是数字还是字符串?

Ruby:是否可以在模块中定义类方法?

Ruby:从 Ruby 中的变量创建哈希键和值

你可以在Ruby中使用分号吗?