小编reb*_*ebo的帖子

我不明白ruby本地范围

在这个例子中,

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时我没有收到此错误?

ruby

49
推荐指数
2
解决办法
1万
查看次数

编码Objective-c块?

是否可以使用?编码Objective-C块NSKeyedArchiver

我不认为Block对象是NSCoding-compliant,因此[coder encodeObject:block forKey:@"block"]不起作用?

有任何想法吗?

objective-c nscoding objective-c-blocks

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

-forwardInvocation与Clang-LLVM一起使用但不与GCC一起使用

以下代码实现了一个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)

gcc objective-c llvm clang

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

标签 统计

objective-c ×2

clang ×1

gcc ×1

llvm ×1

nscoding ×1

objective-c-blocks ×1

ruby ×1