Tag: 模块

使用多个模块扩展的对象中的方法的Ruby优先级

鉴于以下内容: class User; attr_accessor :roles; end module RegisteredUser def default_context Submission end end module Admin def default_context Review end end current_user = User.new current_user.roles = [“registered_user”, “admin”] current_user.roles.each do |role| role_module = role.gsub(/ /, ‘_’).camelize if module_exists?(role_module) current_user.extend role_module.constantize end end context = self.extend current_user.default_context 有没有办法设置User#default_context的优先级? 也就是说,无论current_user的扩展顺序如何,我是否可以说Admin#default_context始终优先于RegisteredUser#default_context ?

为什么Ruby三元运算符不允许扩展和类似?

我有两位代码,据我所知,Ruby应该具有相同的function。 两者都在同一初始化方法中: class TicTacToePlayer def initialize(player_type = { human: true }) # Here end end 第一个代码是标准的if / else语句: if player_type[:human] extend Human else extend Joshua end 第二个是上面作为三元运算符: player_type[:human] ? extend Human : extend Joshua … 我希望两者function相同,但第一个运行顺利,第二个返回以下错误: 语法错误,意外的tCONSTANT,期待keyword_do或'{‘或’(’… yer_type [:human]?extend Human:extend Joshua#ternary op … 为什么不同?

如何重命名Ruby库模块的命名空间?

我想在Rails应用程序中使用ruby Stripe库 。 它使用模块Stripe作为其命名空间。 我想使用Stripe作为我的ActiveRecord模型的命名空间,并将库模块重命名为StripeApi,以便例如StripeApi::Charge引用Stripe库,但Stripe::Charge引用我的Stripe -namespaced ActiveRecord模型(因此,例如Stripe::Charge.create(…)创建数据库记录,而不是仅仅进行API调用。 有没有一个很好的方法来做到这一点? (当然,我可以重命名我的命名空间,或尝试使用不同命名的模型,但我觉得有点难看。)

模块内部的ruby模块

我有一个ruby模块,其中包含许多其他模块。 这是一个简单的例子: module Foo module Bar end module Baz end end 除了,我在Foo模块里面有6-7个模块。 有没有办法可以将Bar / Baz放在单独的文件中,但仍然可以获得相同的行为? 现在我的所有代码都在1个文件中,非常无组织。

Ruby模块,带有来自includer类的静态方法调用

我需要在模块中定义使用包含此模块的类中的方法的常量: module B def self.included(base) class << base CONST = self.find end end end class A def self.find "AAA" end include B end puts A::CONST 但是编译器会在第4行给出错误。 有没有其他方法来定义常量?

ruby / rails:扩展或包含其他模块

我将模块分开,以便更容易阅读和搜索 lib features – running.rb – walking.rb features.rb 他们有 # lib/features/running.rb module Features::Running extend ActiveSupport::Concern module ClassMethods def can_run … end end end 另一个是: # lib/features/walking.rb module Features::Walking extend ActiveSupport::Concern module ClassMethods def can_walk … end end end 总有一天我可能会有这么多。 我的问题是当我想在模型中添加它们时,我需要 # Sample model class Man < ActiveRecord::Base # Include features modules include Features::Walking include Features::Running […]

在单独的文件中定义时,将Ruby类添加到模块

我想通过将它们放在一个模块中来命名我的Ruby类。 实际上,如果我决定发布我的Ruby gem以使类名不与另一个gem中的现有类冲突,这是一个好主意。 我知道我可以为A::B类做以下事情: module A class B end end 但是,上面的内容非常麻烦,因为我需要将所有类定义放在一个Ruby源文件中,以便将它们放在模块下。 我宁愿将我的类定义保存在单独的源文件中,就像Java项目一样,那么当它们在单独的文件中定义时,如何将类添加到模块中呢?

使用Class vs Module在Ruby中打包代码

假设我有一堆没有持久状态的相关函数,比如字符串差异包中的各种操作。 我可以在类或模块中定义它们(使用self ),它们可以以完全相同的方式访问: class Diff def self.diff … def self.patch … end 要么 module Diff def self.diff … def self.patch … end 然后我可以做Diff.patch(…) 。 哪个’更好’(或’正确’)? 我需要将它们分组的主要原因是名称空间问题,常用函数名称都在其他地方使用。 编辑:将示例从矩阵更改为差异。 矩阵是一个可怕的例子,因为它确实有状态,每个人都开始解释为什么把它们写成方法而不是回答实际问题更好。 🙁

自定义响应者应该在Rails项目中的哪个位置?

我需要在“模块响应程序”下实现自定义响应程序,但是,我不确定这些代码应该在哪里存在?

Ruby#等效的C#’using’语句

在过去的几个月里我一直在使用Ruby,但是我还没想到的一件事是using语句的Ruby等价的C#(和其他语言)。 我一直在使用require语句声明我对Gems的依赖,但是我变得懒惰,并且宁愿不完全限定我经常使用的类名和模块(名称空间)名称。 当然这是可能的,对吧? 我一定不能使用正确的术语,因为谷歌没有给我任何有用的东西。