问题标签 [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 - 默认 Ruby 访问器方法?
是否有一个默认方法或类访问器可以添加到 Ruby 类中,如果访问器(类似 Ruby 的属性)不退出,则该类会被调用?然后我可以编写一些自定义代码来回复,就像从数据库中读取的数组列表一样,可以像访问器一样访问值,而无需我编写访问器代码(因为如果从数据库中读取它是未知的)。
使用 Ruby MRI 1.9
谢谢!
ruby - 我头上的“Programming Ruby”中的method_missing
方法缺失
*obj.method_missing( 符号 h , args i ) → other_obj
当 obj 收到无法处理的消息时由 Ruby 调用。symbol 是被调用方法的符号,args 是传递给它的任何参数。下面的示例创建了一个 Roman 类,它响应名称由罗马数字组成的方法,并返回相应的整数值。method_missing 的一个更典型的用途是实现代理、委托和转发器。
我刚刚听说缺少方法,并在Programming Ruby中找到了更多信息,但是书中引用的上述解释超出了我的理解。有没有人有更简单的解释?更具体地说,缺少方法是否仅由解释器使用,或者是否需要直接在程序中调用它(假设我只是在编写 Web 应用程序,而不是为 NASA 编写代码)?
c# - C# 4.0 中缺少方法的困难:动态与 RealProxy
有谁知道用 a 拦截dynamic
方法调用(尤其是那些将要引发RuntimeBinderException
s 的方法调用)的方法RealProxy
?我希望捕获异常并在此基础上实现“缺少方法”,但它似乎在拦截器查看之前被抛出。
我的测试看起来像:
WhereWorld
实际上没有在DynamicObject
. 拦截器非常简单 - 我希望检查IMethodReturnMessage.Exception
并RuntimeBinderException
转发到类似的内容:
不幸的是,我在拦截器中看到的只是一些对 的调用GetType
,而不是不存在的World
方法。
如果做不到这一点 - 有谁知道是否有一个DynamicProxy
版本可以在 .NET 4.0 上愉快地运行,但可能已经解决了这个问题?
ruby - 如何交替访问访问器作为数组索引?
我有一个类Foo
,它有几种方法,如button_0_0
, button_0_1
, button_0_2
,button_1_0
等。
我希望能够通过以下语法交替访问这些:
我知道我可以创建一个@button
实例变量并遍历所有button_*
访问器并以这种方式添加它们,但这似乎有点笨拙,并且并没有真正遵循做事的“红宝石方式”。
我想知道是否有更简洁的 Rubyish 解决方案来解决这个问题(也许通过使用method_missing
?)——有人知道更好的方法吗?
(我已经部分解决了这个问题,但我被困在方括号中,因为[]
在缺少的方法上调用了一个新方法......)
.net - 如何拦截 Boo 中的方法调用?
Ruby 有method_missing
,Python 有getattr
。Boo 是否提供了一些我可以用来拦截方法调用的东西?
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)。为什么?
erlang - Erlang 和 method_missing
我来自 Java 和 Ruby 背景,我想知道 Erlang 中是否有任何等效的“method_missing”。我查看了文档,我能看到的最接近的是 erl_eval 和 erl_parse 的使用,但我想知道是否还有其他方法?
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/
ruby - rake 任务是否有“method_missing”?
如果我的 Rakefile 没有找到具有特定名称rake
的任务,如果存在缺少任务名称的文件,我想根据某些规则使用该名称创建一个新任务。但如果不是,我想回到默认值(“不知道如何构建任务'foo'!”)。
简而言之,有一个method_missing
for Rake 吗?
ruby - 在 Ruby 中使用多个模块覆盖相同的 Class 方法,需要调用 super。我是使用方法别名还是其他一些巧妙的技巧?
情况如下:
我有一个用户模型和两个用于身份验证的模块:Oauth 和 Openid。它们都覆盖ActiveRecord#save
,并且有相当多的实现逻辑。
鉴于我可以判断用户何时尝试通过 Oauth 与 Openid 登录,但它们都已被覆盖save
,那么“最终”如何覆盖save
以便我可以有条件地调用其中一个模块的实现?
这是我所描述的基本结构:
我正在考虑使用alias_method
like so,但这太复杂了,因为我可能还有 1 或 2 个类似的模块。我也尝试使用这些save_with_oauth
方法(如上所示),几乎可以工作。唯一缺少的是我还需要调用ActiveRecord::Base#save
(超级方法),所以是这样的:
但我不允许在 ruby 中这样做。
有什么聪明的解决方案的想法吗?
那alias_method_chain
会做吗?我避免这样做,因为人们似乎说这是一个坏主意。
(边走边找东西):