Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c DDMathParser:解析包含if语句的公式_Objective C_Ios_Parsing_Nspredicate - Fatal编程技术网

Objective c DDMathParser:解析包含if语句的公式

Objective c DDMathParser:解析包含if语句的公式,objective-c,ios,parsing,nspredicate,Objective C,Ios,Parsing,Nspredicate,我已经开始在我当前的项目中实现DDMathParser,我使用这个框架结合字典中给定的变量(变量替换)计算公式的结果 是否可以在公式中使用类似于if语句的语句,例如“if($a>0){$b/$c}else{$b*1000} 我假设if语句可以用与新函数(如中所述)类似的方式创建。如果是这样,如果有人能告诉我如何创建,我将非常高兴 关于如何在DDMathParser中使用if语句,有什么想法或提示吗 谢谢!DDMathParser作者在此 这是不可能的,但不是因为你认为的原因。DDMathPars

我已经开始在我当前的项目中实现
DDMathParser
,我使用这个框架结合字典中给定的变量(变量替换)计算公式的结果

是否可以在公式中使用类似于
if
语句的语句,例如“
if($a>0){$b/$c}else{$b*1000}

我假设
if
语句可以用与新函数(如中所述)类似的方式创建。如果是这样,如果有人能告诉我如何创建,我将非常高兴

关于如何在
DDMathParser
中使用
if
语句,有什么想法或提示吗


谢谢!

DDMathParser
作者在此

这是不可能的,但不是因为你认为的原因。
DDMathParser
可以解析
if
很好。这是它可能会遇到问题的花括号。你可以:

if ($a > 0) ($b / $c) else ($b * 1000)
这将被解析为:

if($a > 0) * ($b / $c) * else($b *1000)
它被记录为:

multiply(multiply(if(l_gt($a,0)),divide($b,$c)),else(multiply($b,1000)))
因此,您可以这样做,但自己尝试和处理作用域将是一件非常痛苦的事情。我认为将字符串预解析为各个部分可能会更容易:

if ($a > 0) => if(l_get($a, 0))
($b / $c) => divide($b, $c)
($b * 1000) => multiply($b, 1000)

然后自己处理。

如果我正确理解你的答案,这是否意味着我可以在公式中使用
If
语句,但必须用其他语句替换大括号?顺便说一句,
a
b
c
是将被替换的变量。谢谢!@AlexR你可以使用
If
,因为DDMathParser会认为它是一个函数的名称。然后,您需要对
DDExpression
进行后期处理以自己提取内容。
a
b
c
也被视为尚未解析的函数。(如果它们是
$a
$b
$c
,则它们是变量)。我为我的具体问题想出了一个更简单的解决方案:我正在使用一个变量(例如,$
isInFuture
,如果它为假,我将其设置为
0
,如果为真,我将其设置为
1
。然后我可以将我的公式写成
$isInFuture*($DDPS1*Pc1)+(1-$isInFuture)*($DDPS2*Pc2)
对第一条或第二条语句求值。在您看来,这是一种可行的策略吗?