我想下面的方法添加到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不是一个类'
好像我忽略了一些非常简单的事情.
有什么想法吗?
在此先感谢您的帮助.
这个问题的答案,在解释器中有一些脚手架来检查框架对象,可以通过它来检索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中的当前帧运行时变量是否可写.
Linux上的程序如何发现自身的进程ID?/ proc/self中有什么东西可以解决这个问题吗?
例如,在Javascript中,您可以通过简单地获取arity(函数应该采用的参数数量)func.length.如何获取Objective-C中方法的这些信息?
被调用者是否有可能强制其调用者在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) 我有一个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
我有一个看起来像这样的课程:
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++中实现这一点吗?
我正在寻找一种方法来获取 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) 编写一个类Foo,允许其实例返回使用它们创建的名称__name__,
A = Foo(args)
str(A.__name__)
Run Code Online (Sandbox Code Playgroud)
应该返回'A'
在对类执行内省时,我使用以下代码:
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) introspection ×10
python ×4
objective-c ×3
c ×1
c++ ×1
class ×1
cocoa-touch ×1
frame ×1
linux ×1
python-3.x ×1
ruby ×1
sys ×1