在这个例子中,
def foo(x)
if(x > 5)
bar = 100
end
puts bar
end
Run Code Online (Sandbox Code Playgroud)
然后foo(6)输出:100和foo(3)什么都不输出.
但是,如果我将定义更改为
def foo(x)
if(x > 5)
bar = 100
end
puts bob
end
Run Code Online (Sandbox Code Playgroud)
我得到一个"未定义的局部变量或方法"错误.
所以我的问题是为什么当我调用foo(3)并且从未设置bar时我没有收到此错误?
是否可以使用?编码Objective-C块NSKeyedArchiver
?
我不认为Block对象是NSCoding
-compliant,因此[coder encodeObject:block forKey:@"block"]
不起作用?
有任何想法吗?
以下代码实现了一个NSProxy子类,它将方法转发给NSNumber实例.
但是当调用[nsproxy floatValue]时,我在GCC 4.2下得到0.0.
在LLVM-Clang下我得到正确的答案42.0.
知道发生了什么事吗?
(顺便说一下,这是在Garbage Collection下运行的)
-(id) init;
{
_result = [NSNumber numberWithFloat:42.0];
return self;
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
return [[_result class] instanceMethodSignatureForSelector:aSelector];
}
- (void)forwardInvocation:(NSInvocation *)anInvocation
{
[anInvocation setTarget:_result];
[anInvocation invoke];
return;
}
Run Code Online (Sandbox Code Playgroud)