首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加对obj-c的动态评估

添加对obj-c的动态评估
EN

Stack Overflow用户
提问于 2014-02-25 22:47:20
回答 2查看 175关注 0票数 4

我知道Obj-c是一种编译语言,不像python或ruby那样提供任何早期的趣味性,但我需要一些动态功能,我无法在两种不同的方式之间做出决定。

问题是:您有一个描述复杂数学公式的字符串,如

@"var_a + 4 - (3 * var_b)"

我已经有了一种从var_avar_b中评估当前值的方法,所以第一步是可以的。第二步是评估公式,我们至少有两个不同的选项:

  1. 创建一个字符串并尝试使用javascript引擎进行计算(非常糟糕)。
  2. 映射在对象中的基本思想是公式矩阵。我说的是创建一个对象SUM_Object,它接受两个不同的操作数,并返回两个参数的和(例如,on...like除法等等)。
  3. 使用DDMathParser。

我认为第二点是最好的solution....any建议?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 22:51:57

为什么不使用NSExpressionhttp://nshipster.com/nsexpression/

更新:

你需要这样的东西

代码语言:javascript
复制
int a = 1, b = 2;
NSExpression *expression = [NSExpression expressionWithFormat:@"%i + 4 - (3 * %i)", a, b];
id value = [expression expressionValueWithObject:nil context:nil];

UPDATE2:

<, >, ==, !=, >=, <=中使用NSExpression是不可能的。但你可以用NSPredicate

代码语言:javascript
复制
int a = 1, b = 2;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%i > %i", a, b];
BOOL result = [predicate evaluateWithObject:nil];
票数 2
EN

Stack Overflow用户

发布于 2014-06-30 08:27:54

如果您需要解析/评估高级数学表达式,请查看DDMathParser。我们还可以轻松地添加自己的表达式。

来自维基的示例

代码语言:javascript
复制
NSLog(@"%@", [@"1 + 2" numberByEvaluatingString]);

更新:

正如您在项目的wiki中在操作员页上看到的那样,它还支持逻辑运算符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22027893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档