Mi sono sentito leggermente spiritoso l'altro giorno, ho scritto un metodo eachWithIndex:
in una categoria NSArray
. Ha un typedef come questo:
typedef void (^processItem)(id item, int index);
e il metodo assomiglia a questo:
- (void)eachWithIndex:(processItem)block {
for (int i=0; i<self.count; i++) {
id item = [self objectAtIndex:i];
block(item, i);
}
}
Tuttavia, se il mio blocco contiene un return
in qualsiasi punto, non salta fuori dal metodo chiamante (né dal blocco). Considera questo codice in Ruby:
def blah
%w{one two three}.each_with_index {|thing, i| puts "#{i}=#{thing}"; return "hello!" if i==1 }
puts "blah does more stuff"
end
quando i
raggiunge uno, il metodo blah
terminerà. Questo non succede in Obj-C, e penso che dovrebbe. I blocchi sono più integrati in Ruby rispetto a Objective-C?