ruby 从其他文件调用模块

iqjalb3h  于 2023-04-29  发布在  Ruby
关注(0)|答案(2)|浏览(113)

我正在尝试将模块调用到主脚本中。我使用require链接文件。下面是我的代码的样子:

module Ex36_method
    def m_defense
        puts "Do you want to play zone or man to man for this possession?"
        print "> "
        choice = $stdin.gets.chomp
        if choice.include? "zone"
            zone
        elsif choice.include? "man to man"
            m_rebound
        else
            dead("You failed to play defense")
        end
    end
    def zone
        puts "The opposition scores a 3!"
    end
    def m_rebound
        puts "The ball rims out and you got a rebound!"
    end
end
require_relative 'Ex36_method' 

def start 
    puts "You are in the final minute of game 7 of the NBA finals."
    puts "You are down by 3 points."
    puts "What do you do: take a 3 pointer that might tie or take a guaranteed 2?"
    print "> "
    choice = $stdin.gets.chomp
    if choice.include? "3 pointer"
        puts "You missed! The ball rims out but you got the rebound at 40 seconds."
        pass 
    elsif choice.include? "2 pointer"
        puts "You scored! 50 seconds on the clock. Now it's time for defense"
        m_rebound
    else
        dead("Turnover")
    end
end
def dead(why)
    puts why, "The opposing team scores a 3 and you lose. Better luck next year!"
end
start

当我调用链接模块中的函数时,我收到以下错误:

"ex36.rb:16:in `start': undefined local variable or method `m_rebound' for main:Object (NameError)
    from ex36.rb:27:in `<main>'"

任何帮助将不胜感激。

apeeds0o

apeeds0o1#

您已经加载了模块,但尚未将模块的方法包含到当前作用域中。添加一个include语句来执行此操作:

require_relative 'Ex36_method'

include Ex36_method

def start
#...
o2rvlv0m

o2rvlv0m2#

这显示了使用“::”前缀来限定方法的类描述符如何允许解释器的链接代码解析引用。

#animal.rb

module Animals
    def hello
        puts "hello dear"
    end
end

#index.rb

require_relative "animal"

include Animals

Animals::hello #ouputs "hello dear"

相关问题