标签: introspection

我怎样才能动态地添加一个方法在Ruby on Rails的Math类?

我想下面的方法添加到Ruby on Rails的Math类:

class Math
  def self.round_with_precision(number, precision)
    scalar = 10.0 ** precision
    number = number * scalar
    number = number.round
    number = number / scalar
    return number;
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我将以下内容添加到我的environment.rb中:

require 'lib/math'
Run Code Online (Sandbox Code Playgroud)

当我打开Rails控制台时,我收到以下错误:'./ lib/math.rb:2:TypeError Math不是一个类'

好像我忽略了一些非常简单的事情.

有什么想法吗?

在此先感谢您的帮助.

ruby metaprogramming ruby-on-rails introspection

1
推荐指数
1
解决办法
1019
查看次数

是否可以从解释器中运行的python代码写入sys._getframe()返回的python框架对象?

这个问题的答案,在解释器中有一些脚手架来检查框架对象,可以通过它来检索sys._getframe().框架对象看起来是只读的,但我在文档中找不到任何明显说明这一点的东西.有人可以确认这些对象是可写的(以某种方式)还是只读的?

import sys

def foobar():
    xx='foo'
    ff = sys._getframe()
    ff.f_locals['xx'] = 'bar'
    print xx

if __name__ == '__main__':
    foobar()
Run Code Online (Sandbox Code Playgroud)

foo会在运行时输出' ',但下面的帖子演示了从交互式shell中的当前帧运行时变量是否可写.

python introspection frame sys

1
推荐指数
1
解决办法
2939
查看次数

Linux上的程序如何内省其pid?

Linux上的程序如何发现自身的进程ID?/ proc/self中有什么东西可以解决这个问题吗?

linux introspection

1
推荐指数
1
解决办法
260
查看次数

如何获得方法的arity?

例如,在Javascript中,您可以通过简单地获取arity(函数应该采用的参数数量)func.length.如何获取Objective-C中方法的这些信息?

introspection objective-c

1
推荐指数
1
解决办法
313
查看次数

被调用者是否有可能强制其调用者在python中返回?

被调用者是否有可能强制其调用者在python中返回?如果是这样,这是一个好方法吗?它是否违反Explicit比隐含更好.Python禅的句子?

例:

import inspect

class C(object):
    def callee(self):
        print 'in callee'
        caller_name = inspect.stack()[1][3]
        caller = getattr(self, caller_name)
        # force caller to return
        # so that "in caller after callee" gets never printed

        caller.return() # ???

    def caller(self):
        print 'in caller before calle'
        self.callee()
        print 'in caller after callee'

c = C()

c.caller()

print 'resume'
Run Code Online (Sandbox Code Playgroud)

输出:

in caller before callee
in callee
resume
Run Code Online (Sandbox Code Playgroud)

最后,感谢@Andrew Jaffe关于上下文管理器的建议,我用一个简单的装饰器来解决它.

# In my real code this is not a global …
Run Code Online (Sandbox Code Playgroud)

python introspection

1
推荐指数
1
解决办法
173
查看次数

respondsToSelector:相当于CoreFoundation?

我有一个CFArrayRef主要有CFDictionaryRef,但有时它会包含其他东西.如果可以的话,我想从数组中的字典中访问一个值,如果不能,我不会崩溃.这是代码:

bool result = false;
CFArrayRef devices = CFArrayCreateCopy(kCFAllocatorDefault, SDMMobileDevice->deviceList);
if (devices) {
    for (uint32_t i = 0; i < CFArrayGetCount(devices); i++) {
        CFDictionaryRef device = CFArrayGetValueAtIndex(devices, i);
        if (device) { // *** I need to verify this is actually a dictionary or actually responds to the getObjectForKey selector! ***
            CFNumberRef idNumber = CFDictionaryGetValue(device, CFSTR("DeviceID"));
            if (idNumber) {
                uint32_t fetched_id = 0;
                CFNumberGetValue(idNumber, 0x3, &fetched_id);
                if (fetched_id == device_id) {
                    result = true;
                    break;
                }
            } …
Run Code Online (Sandbox Code Playgroud)

c introspection objective-c core-foundation respondstoselector

1
推荐指数
1
解决办法
161
查看次数

C++中的运行时内省

我有一个看起来像这样的课程:

class MyClass {
    public:
    void doSomething() { // nothing here };
}
Run Code Online (Sandbox Code Playgroud)

它还有一个看起来像这样的子类

class MyChildClass : MyClass {
    public:
    void doSomething() { // actual code here };
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该doSomething()函数在父类中不执行任何操作,但子类会覆盖它并添加实际代码.我的问题是我试图做这样的事情:

MyClass foo = MyChildClass();
foo.doSomething();
Run Code Online (Sandbox Code Playgroud)

我很震惊地发现,在这种情况下,MyClass而不是MyChildClass的版本doSomething()被称为,即使FOO实际类型为MyChildClass.我在Objective-C方面的经验远远超过C++,所以这对我来说非常奇怪.似乎C++正在确定doSomething()在编译时需要调用哪个版本的版本,而不是在运行时检查对象的类型并调用正确的版本.

这对我来说是有问题的,因为在我的实际代码中,我拥有的是一个父类和从中继承的多个不同的子类.这些子类中的每一个都doSomething()使用它们自己的唯一实现来覆盖该函数.我最终拥有一个std::vector完整的MyClass对象(它们实际上充满了各自继承的许多不同类型的对象MyClass),我想循环遍历这些对象并调用它们的版本,doSomething()而不是在编译时实际知道它们的类型.在Objective-C中这很容易,但是我有什么方法可以在C++中实现这一点吗?

c++ class introspection object-slicing

1
推荐指数
1
解决办法
339
查看次数

在 Python 3 中是否可以获取函数需要多少个位置参数?

我正在寻找一种方法来获取 Python 3 中函数需要多少个位置参数。
如下所示:

def a():pass # 0 positional arguments
def b(x):pass # 1 positional argument
def c(x=0):pass # 0 positional arguments
def d(x,y=0):pass # 1 positional argument
def e(x,y):pass # 2 positional arguments
def f(x=0,y=0):pass # 0 positional arguments
Run Code Online (Sandbox Code Playgroud)

python introspection python-3.x

1
推荐指数
1
解决办法
1143
查看次数

如何编写一个允许使用__name__对实例进行内省的类?

编写一个类Foo,允许其实例返回使用它们创建的名称__name__,

A = Foo(args)

str(A.__name__) 
Run Code Online (Sandbox Code Playgroud)

应该返回'A'

python introspection

0
推荐指数
1
解决办法
52
查看次数

目标C反思

在对类执行内省时,我使用以下代码:

if([object isKindOfClass:[NSNumber class]]){

        NSLog(@"I am an NSNumber: %@", object);
    }

 NSLog(@"Properties:%@", [object class]);
Run Code Online (Sandbox Code Playgroud)

输出是:

I am an NSNumber: 320
Properties:__NSCFNumber
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么结果是类型NSNumber的__NSCFNumber?我还注意到NSArray被识别为:

__NSArrayI
Run Code Online (Sandbox Code Playgroud)

cocoa-touch introspection objective-c

0
推荐指数
1
解决办法
962
查看次数