也许我的标题有点令人困惑所以我会用场景说明
假设我想在2个int值之间进行比较,并根据逻辑比较返回一个布尔值。
if (int1 > int2) return true;
if (int3 < int4) return true;
if (int5 == int6) return true;
if (int7 >= int8) return true;
if (int9 <= int10) return true;
但不是手动编写,我希望做一些像
这样的事情- (bool)compareVal1: (int)val1 withVal2: (int)val2 usingLogical: (NSString*)logic
{
if (val1 "logic" val2) return true;
}
我想要一个通用函数,可用于表示我想要的5个逻辑比较。 我不确定这是否可以实现,但如果您有任何其他解决方案,请告知:)
答案 0 :(得分:3)
首先,我会使用枚举而不是NSString来决定使用哪个逻辑运算符。所以尝试这样的事情:
typedef enum {
GREATER_THAN,
LESS_THAN,
LESS_THAN_OR_EQUAL,
GREATER_THAN_OR_EQUAL,
EQUALS
} logicalOperator;
实际功能如下:
+ (bool)compareVal1: (int)val1 withVal2: (int)val2 usingLogical: (logicalOperator)op
{
switch(op) {
case GREATER_THAN:
return (val1 > val2);
case LESS_THAN:
return (val1 < val2);
case LESS_THAN_OR_EQUAL:
return (val1 <= val2);
case GREATER_THAN_OR_EQUAL:
return (val1 >= val2);
case EQUALS:
return (val1 == val2);
}
}
我还要将函数设置为静态/类函数,因为它不会真正影响类的特定实例,而是它是一个对传入的值进行操作的实用函数。此函数用法的一个示例是这样:
bool isGreater = [MyClass compareVal1: 4 withVal2: 3 usingLogical: GREATER_THAN];
答案 1 :(得分:2)
不确定为什么你不能直接解析字符串并返回表达式的结果。例如(仅说明两个运算符):
- (bool)compareVal1: (int)val1 withVal2: (int)val2 usingLogical: (NSString*)operator
{
if([operator isEqualTo:@">"])
{
return (val1 > val2);
}
else if ([operator isEqualTo:@"<"])
{
return (val1 < val2);
}
// similar logic statements for other operators
}
更有针对性的是,为什么你只需要编写评估本身就需要一种方法来实现这一点?