问题标签 [alias-method]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3717 浏览

ruby - `alias_method` 一个私有方法

我有一个公开两个接口方法的类client_optionsuser_options并且在这个祖先级别上,它们等同于default_options. 我不希望其他开发人员default_options直接实现,因此它是私有的。

为了节省一些代码行,我想给这些方法起别名:

alias_method只有别名公共方法。

我在这个博客上找到了如何给私有方法起别名:

但是,它有点不可读。

是否有更直接的解决方案来别名私有方法?

0 投票
1 回答
493 浏览

javascript - 无需替换即可采样的别名方法的有效版本/替代方法

我正在用 HTML5/JS 编写一个测验/教学游戏,其中向玩家提供了一组来自更大掌握集的 10 个问题。游戏会随着时间的推移跟踪玩家的分数,并且更有可能从问题列表中选择玩家遇到问题的问题。

为了构建概率分布列表,我采用如下别名方法,在 O(1) 时间内选择一个项目,同时完全遵循分布:

这种方法非常有效,但我的部分业务规范是问题不会重复。我目前使用一种简单的 reroll 技术来完成此操作,但很明显,如果少于 10 个项目比其余项目更有可能发生,这将打破:

可以对这种方法做些什么或对这种方法做些什么来使我能够有效地对问题进行抽样而无需替换?

0 投票
2 回答
218 浏览

ruby - 包含模块时 __callee__ 的意外值 - 这是 Ruby 错误吗?

通过创建的方法调用时alias_method__callee__忽略旧方法的名称(此处xxx)并返回新方法的名称,如下所示:

即使xxx从超类继承,这种行为也成立:

鉴于上述两种情况,我希望xxx通过模块包含相同的行为。然而,事实并非如此:

我希望返回值是:baz,不是:xxx


上面的代码是使用 Ruby 2.3.1p112 执行的。这是实现中的错误__callee__吗?或者也许是alias_method?如果没有,谁能解释为什么模块包含的行为不同?


更新 1

我已将此发布到 Ruby 错误跟踪器,以试图激起答案。


更新 2

显然,我不是唯一一个对这个问题感到惊讶的人。我想知道修订版 50728(旨在解决错误 11046:__callee__在 orphan proc 中返回不正确的方法名称)是否相关。

0 投票
1 回答
1208 浏览

ruby - 类方法中的 ruby​​ alias_method

似乎 alias_method 在 class << self 块内部的工作方式与在外部的工作方式不同。具体来说,当我将 alias_method 用于实例方法并随后覆盖该方法时,可以使用别名来访问原始方法。但是,我无法使用类方法来做到这一点。

这是我的用例:我正在覆盖从 ActiveRecord 基继承的 destroy 和 destroy_all 方法,因为当前编写的代码很容易在您打算删除连接记录时意外删除行。这种设计可能会随着一个更大的项目而改变,但现在这是我的解决方案,因为大多数情况下,没有人会想要从这个表中删除行。但是为了仍然允许出于善意的目的故意删除表中的行,我使用 alias_method 来保留原始destroy和destroy_all方法的句柄。使用别名可以访问原始的 :destroy (实例)方法,但不允许我访问原始的 :destroy_all (类)方法

在这里,我们看到虽然此策略确实适用于允许成功删除单行的实例方法:

我无法访问原始的 :destroy_all 方法以在一个查询中删除多行;相反,即使我使用别名,我也会得到覆盖的方法:

发生了什么事,我似乎无法为类方法执行此操作,我该如何修复它(除了使用原始 SQL 查询进行删除)?

0 投票
1 回答
333 浏览

ruby-on-rails - ruby self.inherited alias_method

当 Derived.new.sam => "内部派生"

但我期待

“内部派生”

“内部继承”

红宝石新手。任何帮助将不胜感激。

0 投票
1 回答
684 浏览

ruby - Ruby:模块静态方法的别名方法

鉴于此模块

以下不起作用

虽然它适用于实例方法。我收到以下错误

我的目标是覆盖self.foo如下

有没有别名静态方法?

谢谢,

0 投票
0 回答
158 浏览

ruby - Rails Monkey Patch alias_method 导致无方法错误

我正在尝试修补 railsRails.cache.fetch/read方法,并在每次获取/读取发生时添加我的额外日志,但我遇到了一些其他错误,我无法通过谷歌搜索任何答案。

这是我的猴子补丁代码

这是特拉维斯失败的地方

某处有代码调用B.cache.each do |x| blablabla end

问题是我做错了什么?我只是在 Store 下修补两个方法,但为什么它似乎覆盖了调用 .cache 的所有内容

0 投票
1 回答
67 浏览

ruby - 为逻辑运算符添加别名

我有 ruby​​ 项目(没有 rails),我想为我的班级的逻辑 AND 和 OR 运算符添加别名。我已经为我的类重载了逻辑运算符,但是如果我像这样添加alias_method :foo, :or和使用class_example_1 foo class_example_2我会得到 SyntaxError。如何使别名起作用?

0 投票
2 回答
369 浏览

ruby - 什么时候应该使用别名方法?- 红宝石

我已经查看并没有看到以下问题的答案:

你会使用什么别名方法?

我使用一个问号的唯一原因是能够通过我定义的任何方法使用问号吗?我相信您不能对实例变量使用问号。

0 投票
1 回答
114 浏览

ruby - 改进 hacky ruby​​ 'method_alias' 修复冲突的 redmine 插件?

使用 redmine 3.x,我在两个插件之间存在依赖冲突 - redmine subtask list AccordionSubtask list inherit fields。尝试查看问题时,安装两者都会引发 500 错误。

经过大量试验和错误后,我们通过在第一个插件的原始源代码中添加以下内容来解决问题:

这是原始代码:

https://github.com/GEROMAX/redmine_subtask_list_accordion/blob/master/lib/redmine_subtask_list_accordion/patches/issues_helper_patch.rb

其中有来自上述源代码的前两个alias_method调用。

通过为原始类中的每个方法创建一个具有相同名称的别名方法,代码可以正常工作。然而,这似乎是一个 hacky 修复,我不明白它为什么会起作用。有人可以解释为什么修复有效以及如何正确重写它吗?