问题标签 [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.
ruby-on-rails - 使用 Rails 中缺少的方法
我有一个具有多个日期属性的模型。我希望能够将值设置和获取为字符串。我像这样过度使用了其中一种方法(bill_date):
这对我的需求非常有用,但是我想对其他几个日期属性做同样的事情......我将如何利用缺少的方法,以便可以像这样设置/获取任何日期属性?
ruby - Ruby:为什么 puts 调用 to_ary?
我正在学习 Ruby 中的元编程,并且正在尝试通过 method_missing 和 define_method 定义缺失的方法。我遇到了一些意想不到的行为,想知道是否有人可以解释这一点。这是我的课:
现在,这段代码:
产生输出:
我没有得到的是最后一部分:为什么 Ruby 在调用 puts 时调用 to_ary?为什么 Ruby 会尝试将我的对象转换为数组来打印它?
我用谷歌搜索并找到了这些相关链接:
- http://tenderlovemaking.com/2011/06/28/til-its-ok-to-return-nil-from-to_ary/
- http://yehudakatz.com/2010/01/02/the-craziest-fing-bug-ive-ever-seen/
这些也讨论了 method_missing 和 to_ary 陷阱,但没有具体讨论为什么 puts 会调用 to_ary。
我还应该提到,当我定义一个 to_s 时,行为不会改变,例如
“puts x”的输出是:
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_variables
或eval
导致错误。
ruby - Ruby - method_missing
我正在尝试实现一个 method_missing 来将 $ 转换为其他货币,例如 5.dollars 产生 5,5.yen 产生 0.065 5.euro 6.56 等等。这是我现在可以做到的。现在我需要实现它,但例如做 5.dollars.in(:yen) 。
这就是我现在所拥有的:
谁能解释我该怎么做?
PS:我宁愿你不要给我代码,而是一个解释,所以我可以自己确定它是如何完成的。
ruby - Ruby - ArgumentError:参数数量错误(2 比 1)
我有以下类覆盖:
每当 in 的参数是复数时,例如:10.dollars.in(:yens)
我得到ArgumentError: wrong number of arguments (2 for 1)
但10.dollars.in(:yen)
没有产生错误。知道为什么吗?
ruby - 数组、哈希和范围的单一方法缺失
我是红宝石的新手。有没有办法用method_missing编写一个'def Array/Range/Hash',它适用于所有Range、Arrays和Hash,即所有Enumerables?例如,以下应该工作:
Sum() 是我们在 method_missing 中定义的自定义方法。到目前为止,我已经编写了三个不同的函数,分别处理 Array、Range 和 Hash 的 method_missing。
ruby-on-rails - Object.respond_to? 陷入无限循环
我正在构建一个 Rails 3 gem,它本质上修改了从 ActiveRecord 查询返回的记录。我正在做的一件事是覆盖method_missing
andrespond_to?
方法,但似乎我的respond_to?
定义导致无限循环抛出“SystemStackError:堆栈级别太深”错误。
以下是我对这些方法的原始定义:
在试图了解为什么会发生这种无限循环时,我respond_to?
用一些“之前”和“之后”输出进行了重组,以查看它卡在哪里。
运行时,各种回调和属性方法似乎都按预期运行,每个回调和属性方法都有一个 before 和 after 调用:
但是,每当我看到一个 find 回调时,它似乎陷入了无限循环:
如果我破解我的respond_to?
,那么一切似乎都运行顺利:
我做错了什么,我似乎需要这个黑客?我该如何避免呢?
smalltalk - 在 smalltalk 中重新定义 nil 以响应任何消息
我想重新定义 smalltalk 的nil以像objective-c中的那样工作。因此,当nil收到无法处理的消息时,它会返回nil。现在我知道这nil
只是一个快捷方式,但是在RubyUndefinedObject
中是否有类似的东西,所以我可以重新定义它以始终返回nil?method_missing
UndefinedObject
ruby-on-rails - Rails Method_missing 从哈希中返回值
我正在尝试编写一个 method_missing 方法,这样当我运行一个方法时,它必须点击哈希并查看键,如果它找到匹配项以返回值。并继续。哈希是从我编写的 sql 查询中填充的,因此值永远不会保持不变。
一个例子就像
在哈希中
所以@month_id 将返回 1。我以前从未使用过它,使用散列作为后备方法缺少的材料并不多
编辑:对不起,我忘了说如果它没有在哈希中找到方法,那么它可以继续下去,直到没有方法错误
编辑:好吧,所以我正在破解,这就是我想出的
有没有更好的办法?
ruby-on-rails - 从模型中的 method_missing 访问会话的最佳方式
我知道模型不应该知道会话数据,但我需要访问模型上定义的 method_missing 中的一小部分状态信息。由 method_missing 捕获的方法由表单助手调用,即:
这里的 'new_display_name' 是通过多态关联定义的自定义属性键。我需要知道上下文(在我的情况下,由控制器中可访问的 current_app 方法提供)以获取不同自定义属性键的集合,我将其映射到 method_missing 中的动态方法定义。
有任何想法吗?我查看了 Thread.current 并且现在倾向于使用它。