@interface Calculator : NSObject
- (Calculator *(^)(float))add;
- (Calculator *(^)(float))minus;
- (Calculator *(^)(float))multiply;
- (Calculator *(^)(float))divide;
- (float)result;
@end
@interface Calculator()
@property (nonatomic, assign) double tmp;
@end
@implementation Calculator
- (Calculator *(^)(float))add {
__weak typeof(self) wself = self;
Calculator *(^result)(float) = ^(float value) {
wself.tmp += value;
return self;
};
return result;
}
- (Calculator *(^)(float))minus {
__weak typeof(self) wself = self;
Calculator *(^result)(float) = ^(float value){
wself.tmp -= value;
return self;
};
return result;
}
- (Calculator *(^)(float))multiply {
__weak typeof(self) wself = self;
Calculator *(^result)(float) = ^(float value){
wself.tmp *= value;
return self;
};
return result;
}
- (Calculator *(^)(float))divide {
__weak typeof(self) wself = self;
Calculator *(^result)(float) = ^(float value){
if (value == 0) {
wself.tmp = 0;
}else {
wself.tmp /= value;
}
return self;
};
return result;
}
- (float)result {
return self.tmp;
}
@end
Calculator *c = [Calculator new];
double d = c.add(1).add(4).minus(3).multiply(5).divide(0.5).result; //20
近期评论