问题标签 [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 投票
1 回答
1910 浏览

ruby - 默认 Ruby 访问器方法?

是否有一个默认方法或类访问器可以添加到 Ruby 类中,如果访问器(类似 Ruby 的属性)不退出,则该类会被调用?然后我可以编写一些自定义代码来回复,就像从数据库中读取的数组列表一样,可以像访问器一样访问值,而无需我编写访问器代码(因为如果从数据库中读取它是未知的)。

使用 Ruby MRI 1.9

谢谢!

0 投票
7 回答
2966 浏览

ruby - 我头上的“Programming Ruby”中的method_missing

方法缺失

*obj.method_missing( 符号 h , args i ) → other_obj

当 obj 收到无法处理的消息时由 Ruby 调用。symbol 是被调用方法的符号,args 是传递给它的任何参数。下面的示例创建了一个 Roman 类,它响应名称由罗马数字组成的方法,并返回相应的整数值。method_missing 的一个更典型的用途是实现代理、委托和转发器。

我刚刚听说缺少方法,并在Programming Ruby中找到了更多信息,但是书中引用的上述解释超出了我的理解。有没有人有更简单的解释?更具体地说,缺少方法是否仅由解释器使用,或者是否需要直接在程序中调用它(假设我只是在编写 Web 应用程序,而不是为 NASA 编写代码)?

0 投票
1 回答
2813 浏览

c# - C# 4.0 中缺少方法的困难:动态与 RealProxy

有谁知道用 a 拦截dynamic方法调用(尤其是那些将要引发RuntimeBinderExceptions 的方法调用)的方法RealProxy?我希望捕获异常并在此基础上实现“缺少方法”,但它似乎在拦截器查看之前被抛出。

我的测试看起来像:

WhereWorld实际上没有在DynamicObject. 拦截器非常简单 - 我希望检查IMethodReturnMessage.ExceptionRuntimeBinderException转发到类似的内容:

不幸的是,我在拦截器中看到的只是一些对 的调用GetType,而不是不存在的World方法。

如果做不到这一点 - 有谁知道是否有一个DynamicProxy版本可以在 .NET 4.0 上愉快地运行,但可能已经解决了这个问题?

0 投票
1 回答
435 浏览

ruby - 如何交替访问访问器作为数组索引?

我有一个类Foo,它有几种方法,如button_0_0, button_0_1, button_0_2,button_1_0等。

我希望能够通过以下语法交替访问这些:

我知道我可以创建一个@button实例变量并遍历所有button_*访问器并以这种方式添加它们,但这似乎有点笨拙,并且并没有真正遵循做事的“红宝石方式”。

我想知道是否有更简洁的 Rubyish 解决方案来解决这个问题(也许通过使用method_missing?)——有人知道更好的方法吗?

(我已经部分解决了这个问题,但我被困在方括号中,因为[]在缺少的方法上调用了一个新方法......)

0 投票
1 回答
449 浏览

.net - 如何拦截 Boo 中的方法调用?

Ruby 有method_missing,Python 有getattr。Boo 是否提供了一些我可以用来拦截方法调用的东西?

0 投票
1 回答
1659 浏览

ruby - 关于define_method和method_missing的问题

我怎样才能使这段代码工作?

这个想法是让 Meta.a(在被定义之后)拥有

在它的身体里。但是运行这个之后,我的输出是:

[:do_call] 不是数组的一部分!

更新:现在有点像这样工作:

但是,这里是 IRB 会话的摘录:

[~/code] $ irb -r 元

irb(main):001:0> Meta.a

一个不见了!

=> #

irb(main):002:0> Meta.a

正在调用 ['a']

=> 无

irb(main):003:0> c = Meta.new

=> #

irb(主):004:0> ca

NoMethodError:未定义的方法“a”用于#

irb(main):005:0> Meta.methods

=> [“检查”,“发送”,“pretty_inspect”,“class_eval”,“克隆”,“yaml_tag_read_class”,> >“public_methods”,“protected_instance_methods”,“发送", "private_method_defined?", "equal?", "freeze", "do_call", "yaml_as", "methods", "instance_eval", "to_yaml", "display", "dup", "object_id", "include ?”、“private_instance_methods”、“instance_variables”、“扩展”、“protected_method_defined?”、“const_defined?”、“to_yaml_style”、“instance_of?”、“eql?”、“name”、“public_class_method”、“hash” , “id”, “new”, “singleton_methods”, “yaml_tag_subclasses?”, “pretty_print_cycle”, “taint”, “pretty_print_inspect”, “frozen?”, “instance_variable_get”, “autoload”,“constants”、“kind_of?”、“to_yaml_properties”、“to_a”、“ancestors”、“private_class_method”、“const_missing”、“type”、“yaml_tag_class_name”、“instance_method”、“<”、“protected_methods”、“ <=>”、“instance_methods”、“==”、“method_missing”、“method_defined?”、“超类”、“>”、“pretty_print”、“===”、“instance_variable_set”、“const_get”、“ is_a?", "taguri", ">=", "respond_to?", "to_s", "<=", "module_eval", "class_variables", "allocate", "class", "taguri=", "pretty_print_instance_variables”、“污染?”、“public_instance_methods”、“=~”、“private_methods”、“public_method_defined?”、“自动加载?”、“id "、"nil?"、"untaint"、"included_modules"、"const_set"、"a"、"method"]

是什么赋予了?'a' 是一个类方法,它不会传递给新的 Meta 对象 (c)。为什么?

0 投票
5 回答
765 浏览

erlang - Erlang 和 method_missing

我来自 Java 和 Ruby 背景,我想知道 Erlang 中是否有任何等效的“method_missing”。我查看了文档,我能看到的最接近的是 erl_eval 和 erl_parse 的使用,但我想知道是否还有其他方法?

0 投票
1 回答
915 浏览

deployment - 在 Microsoft Compact Framework 2.0/3.5 中的 mscorlib.dll 中部署后找不到 System.Threading

我在 windows mobile 6 中遇到了一个问题。我开发了一个应用程序,并且我使用了在 mscorlib.dll 程序集中的 System.Threading 命名空间中存在的 Timer 类。问题是,当我调试它或通过在我的设备(HTC ELF0300)上从 Visual Studio 2008 创建正确的 cab 文件来部署它时,它运行良好,但是当我们的客户将它部署在他的设备(HTC Tilt 2)上时,它给出了 TypeLoadException System.Threading.Timer.ring(),在谷歌搜索并查看我在项目中引用的每个程序集到 IL DASM 和 Visual Studio 的对象资源管理器之后,我已经看到添加到 cab 中的 mscorlib.dll System.Threading 命名空间缺少部署项目,并且我的主项目中的 mscorlib.dll 在对象资源管理器中向我显示 System.Threading 命名空间。

但是,如果 cab 文件中的 mscorlib.dll 中缺少命名空间,我仍然感到困惑,而不是 cab 文件如何在我的设备(HTC ELF0300)上部署和运行良好,但在 HTC Tilt2 上却没有?我该怎么做才能在我的 cab 文件中添加正确的 mscorlib.dll?

任何帮助将不胜感激。谢谢你。

祖奈尔·明哈斯。 http://www.tkxel.com/

0 投票
1 回答
1072 浏览

ruby - rake 任务是否有“method_missing”?

如果我的 Rakefile 没有找到具有特定名称rake的任务,如果存在缺少任务名称的文件,我想根据某些规则使用该名称创建一个新任务。但如果不是,我想回到默认值(“不知道如何构建任务'foo'!”)。

简而言之,有一个method_missingfor Rake 吗?

0 投票
1 回答
1201 浏览

ruby - 在 Ruby 中使用多个模块覆盖相同的 Class 方法,需要调用 super。我是使用方法别名还是其他一些巧妙的技巧?

情况如下:

我有一个用户模型和两个用于身份验证的模块:Oauth 和 Openid。它们都覆盖ActiveRecord#save,并且有相当多的实现逻辑。

鉴于我可以判断用户何时尝试通过 Oauth 与 Openid 登录,但它们都已被覆盖save,那么“最终”如何覆盖save以便我可以有条件地调用其中一个模块的实现?

这是我所描述的基本结构:

我正在考虑使用alias_methodlike so,但这太复杂了,因为我可能还有 1 或 2 个类似的模块。我也尝试使用这些save_with_oauth方法(如上所示),几乎可以工作。唯一缺少的是我还需要调用ActiveRecord::Base#save(超级方法),所以是这样的:

但我不允许在 ruby​​ 中这样做。

有什么聪明的解决方案的想法吗?

alias_method_chain会做吗?我避免这样做,因为人们似乎说这是一个坏主意。

(边走边找东西):