gpt4 book ai didi

ruby-on-rails - 具有更多类的 Ruby gem

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:57 24 4
gpt4 key购买 nike

我想在 ruby​​ 中创建一个 gem,它包含更多类,而不仅仅是与 gem 名称同名的类,并调用这些类的方法,如下所述。

我想要下面的树:

my_handlers
-lib
--my_first_handler.rb
--my_second_handler.rb

创建并安装 gem 后,我想像这样调用类的方法

MyHandlers::MyFirstHandler.Method1
MyHandlers::MySecondHandler.Method1

是否可以创建这样的 gem?(抱歉我的英语不好)

最佳答案

同名 shell 的 gem 的主命名空间不是类,而是模块,所有类和其他模块 shell 都嵌套在其中。对于您的情况,它看起来像:

lib/my_handlers.rb:

require 'my_handlers/my_first_handler'
require 'my_handlers/my_second_handler'

lib/my_handlers/version.rb:

module MyHandlers
Version = 0.0.1
end

lib/my_handlers/my_first_handler.rb:

module MyHandlers
module MyFirstHandler
def method
end
end
end

lib/my_handlers/my_second_handler.rb:

module MyHandlers
module MySecondHandler
def method
end
end
end

并按如下方式组织对方法的访问:

MyHandlers::Version # => 0.0.1
MyHandlers::MyFirstHandler.method
MyHandlers::MySecondHandler.method

或使用::include 操作将模块的方法作为其实例方法包含到类中:

class A
include MyHandlers::MyFirstHandler
end

A.new.method

或者使用::extend操作来扩展一个类,将模块的方法作为类的单例方法:

class A
extend MyHandlers::MyFirstHandler
end

A.method

关于ruby-on-rails - 具有更多类的 Ruby gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426054/

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