尝试使用Ruby-C-Class的实例方法时:
RubyCClass.new.someMethod()
Ruby引发了以下错误:
Error: wrong argument type RubyCClass (expected Data)
有没有办法可以正确地实例化这个类,以便RubyCClass
被实例化到someMethod
将开始执行的程度?换句话说,我是否可以将Data
注入RubyCClass
,以便someMethod
开始执行?
答案 0 :(得分:0)
[注:当问题完全不同时,会回答这个问题;从那时起它就被编辑了。]
我不完全确定您的问题,但我认为您的主要问题是因为您使用的是method
而不是public_send
。 (顺便说一下,如果有帮助的话,你可以通过调用object.public_methods
来获取对象的公共方法列表。)
以下是一些代码,说明可能对您有用的内容:
#!/usr/bin/env ruby
class MethodAccessibility
attr_reader :accessibles, :inaccessibles
def initialize
@accessibles = []
@inaccessibles = []
populate_data
end
def method_accessible?(object, method_name, *args)
begin
object.public_send(method_name, args)
true
rescue Exception => e
e.to_s != "Error: This method cannot be used within the User Interface"
end
end
def add_to_appropriate_array(object, method_name, *args)
accessible = method_accessible?(object, method_name, args)
(accessible ? accessibles : inaccessibles) << method_name
end
def populate_data
object = # create the object on which to call the methods
add_to_appropriate_array(object, :method1, [:arg1, :arg2]) # for examples
add_to_appropriate_array(object, :method2, [])
# ...
end
end
ma = MethodAccessibility.new
ma.accessibles # do something with this array, or the `inaccessibles` array
答案 1 :(得分:0)
我不确定该错误的生成位置;当引擎正在评估Ruby代码返回的值时是什么?
如果是这样,你可以做任何你想做的事情,然后返回一个虚拟的数据对象:
RubyCClass.new.someMethod()
# do other things, then:
Data.new
# or whatever it is you do to create a Data instance;
# as the final value in your code it will be returned