问题标签 [method-missing]

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 投票
2 回答
4896 浏览

ruby-on-rails - 使用 Rails 中缺少的方法

我有一个具有多个日期属性的模型。我希望能够将值设置和获取为字符串。我像这样过度使用了其中一种方法(bill_date):

这对我的需求非常有用,但是我想对其他几个日期属性做同样的事情......我将如何利用缺少的方法,以便可以像这样设置/获取任何日期属性?

0 投票
1 回答
2530 浏览

ruby - Ruby:为什么 puts 调用 to_ary?

我正在学习 Ruby 中的元编程,并且正在尝试通过 method_missing 和 define_method 定义缺失的方法。我遇到了一些意想不到的行为,想知道是否有人可以解释这一点。这是我的课:

现在,这段代码:

产生输出:

我没有得到的是最后一部分:为什么 Ruby 在调用 puts 时调用 to_ary?为什么 Ruby 会尝试将我的对象转换为数组来打印它?

我用谷歌搜索并找到了这些相关链接:

这些也讨论了 method_missing 和 to_ary 陷阱,但没有具体讨论为什么 puts 会调用 to_ary。

我还应该提到,当我定义一个 to_s 时,行为不会改变,例如

“puts x”的输出是:

0 投票
1 回答
1817 浏览

ruby - 为什么我从 irb 1.9.3 中的 method_missing 得到“堆栈级别太深”?

设想:

我使用 -f 运行以避免加载任何 irbrc 内容。我期望在输入时得到 nil a。发生了什么,是否有解决方法?a我尝试用begin/块包装,rescue Exception但没有做任何事情。

这也发生在 1.9.2,但不是 1.9.1。

更奇怪的行为:

这告诉我 irb 中有一个错误,或者 ruby​​ 中的一些模糊错误被 irb 触发了。此外,在定义 method_missing 之后,即使存在的方法也喜欢local_variableseval导致错误。

0 投票
9 回答
10936 浏览

ruby - Ruby - method_missing

我正在尝试实现一个 method_missing 来将 $ 转换为其他货币,例如 5.dollars 产生 5,5.yen 产生 0.065 5.euro 6.56 等等。这是我现在可以做到的。现在我需要实现它,但例如做 5.dollars.in(:yen) 。

这就是我现在所拥有的:

谁能解释我该怎么做?

PS:我宁愿你不要给我代码,而是一个解释,所以我可以自己确定它是如何完成的。

0 投票
2 回答
8875 浏览

ruby - Ruby - ArgumentError:参数数量错误(2 比 1)

我有以下类覆盖:

每当 in 的参数是复数时,例如:10.dollars.in(:yens)我得到ArgumentError: wrong number of arguments (2 for 1)10.dollars.in(:yen)没有产生错误。知道为什么吗?

0 投票
2 回答
751 浏览

ruby - 数组、哈希和范围的单一方法缺失

我是红宝石的新手。有没有办法用method_missing编写一个'def Array/Range/Hash',它适用于所有Range、Arrays和Hash,即所有Enumerables?例如,以下应该工作:

Sum() 是我们在 method_missing 中定义的自定义方法。到目前为止,我已经编写了三个不同的函数,分别处理 Array、Range 和 Hash 的 method_missing。

0 投票
2 回答
636 浏览

ruby-on-rails - Object.respond_to? 陷入无限循环

我正在构建一个 Rails 3 gem,它本质上修改了从 ActiveRecord 查询返回的记录。我正在做的一件事是覆盖method_missingandrespond_to?方法,但似乎我的respond_to?定义导致无限循环抛出“SystemStackError:堆栈级别太深”错误。

以下是我对这些方法的原始定义:

在试图了解为什么会发生这种无限循环时,我respond_to?用一些“之前”和“之后”输出进行了重组,以查看它卡在哪里。

运行时,各种回调和属性方法似乎都按预期运行,每个回调和属性方法都有一个 before 和 after 调用:

但是,每当我看到一个 find 回调时,它似乎陷入了无限循环:

如果我破解我的respond_to?,那么一切似乎都运行顺利:

我做错了什么,我似乎需要这个黑客?我该如何避免呢?

0 投票
3 回答
1406 浏览

smalltalk - 在 smalltalk 中重新定义 nil 以响应任何消息

我想重新定义 smalltalk 的nil以像objective-c中的那样工作。因此,当nil收到无法处理的消息时,它会返回nil。现在我知道这nil只是一个快捷方式,但是在RubyUndefinedObject中是否有类似的东西,所以我可以重新定义它以始终返回nilmethod_missingUndefinedObject

0 投票
2 回答
2012 浏览

ruby-on-rails - Rails Method_missing 从哈希中返回值

我正在尝试编写一个 method_missing 方法,这样当我运行一个方法时,它必须点击哈希并查看键,如果它找到匹配项以返回值。并继续。哈希是从我编写的 sql 查询中填充的,因此值永远不会保持不变。

一个例子就像

在哈希中

所以@month_id 将返回 1。我以前从未使用过它,使用散列作为后备方法缺少的材料并不多

编辑:对不起,我忘了说如果它没有在哈希中找到方法,那么它可以继续下去,直到没有方法错误

编辑:好吧,所以我正在破解,这就是我想出的

有没有更好的办法?

0 投票
1 回答
191 浏览

ruby-on-rails - 从模型中的 method_missing 访问会话的最佳方式

我知道模型不应该知道会话数据,但我需要访问模型上定义的 method_missing 中的一小部分状态信息。由 method_missing 捕获的方法由表单助手调用,即:

这里的 'new_display_name' 是通过多态关联定义的自定义属性键。我需要知道上下文(在我的情况下,由控制器中可访问的 current_app 方法提供)以获取不同自定义属性键的集合,我将其映射到 method_missing 中的动态方法定义。

有任何想法吗?我查看了 Thread.current 并且现在倾向于使用它。