Swift3 DDMathParser隐式乘法不起作用

Swift3 DDMathParser隐式乘法不起作用,swift3,ddmathparser,Swift3,Ddmathparser,我使用DDMathParser使用Swift解算公式表达式。下面的代码工作正常,但是隐式乘法不行。阅读这本书应该有用。。。那么,我错过了什么? 我的代码: 代码抛出错误。使用字符串3*$x,表达式按预期计算。DDMathParser作者在此 因此,当框架有一系列令牌并且正在寻找一个操作符以找出它周围的内容时,就会抛出.invalidFormat错误。如果它找不到运算符,但仍有令牌要解析,但没有运算符,则抛出.invalidFormat错误 这意味着您有一个3.0数字令牌和一个$x变量令牌,但没有

我使用DDMathParser使用Swift解算公式表达式。下面的代码工作正常,但是隐式乘法不行。阅读这本书应该有用。。。那么,我错过了什么? 我的代码:


代码抛出错误。使用字符串3*$x,表达式按预期计算。

DDMathParser作者在此

因此,当框架有一系列令牌并且正在寻找一个操作符以找出它周围的内容时,就会抛出.invalidFormat错误。如果它找不到运算符,但仍有令牌要解析,但没有运算符,则抛出.invalidFormat错误

这意味着您有一个3.0数字令牌和一个$x变量令牌,但没有×乘法令牌


我还看到您正在将一组自定义的TokenResolverOptions传递给myTRO变量。我猜您传递的是一个不包含.allowImplicit乘法值的选项集。如果我尝试在不使用.allowImplicitMultiplication解析器选项的情况下解析3$x,则会抛出.invalidFormat错误。

好的,我自己得到了。正如Dave DeLong提到的,allowImplicitMultiplication默认包含在选项中,但在创建自定义选项时将被忽略。因为我想使用本地化表达式,所以表达式字符串中的十进制分隔符是本地的,所以我需要使用表达式的高级定义:

为了使用本地化字符串选项,我定义了让myLocale=NSLocale.current,但意外地还创建了一个新的运算符Set new options并将其传递给表达式定义。正确的方法不是创建自定义运算符集和选项,而是在表达式定义中使用默认值:

let expression = try Expression(string: expressionString, operatorSet: OperatorSet.default, options: TokenResolverOptions.default, locale: myLocale)

DaveDelong在创建DDMatParser框架方面做得非常出色。对于新手来说,这是很难开始的。DDMathParser的部分非常基础,没有提供DDMatParser提供的所有其他优秀功能的详细信息或示例。

。。。看起来它应该。。。您捕获的具体错误是什么?@DaveDeLong,抛出的错误是一个invalidFormat错误。你好,Dave,感谢您的回复。我该如何实际地包括。allowImplicitMultiplication@JFS如何创建myTRO变量?默认选项包括隐式乘法。我只需执行以下操作:让myTRO=TokenResolverOptions,而不向myTRO添加任何内容。我不想更改/添加运算符集或选项,但我需要使用此高级表达式定义来处理本地化表达式字符串。哦,使用let expression=try Expressionstring:myString正在使用隐式乘法!但是我不能使用本地化表达式字符串选项。。。
let expression = try Expression(string: ..., operatorSet: ..., options: ..., locale: ...)
let expression = try Expression(string: expressionString, operatorSet: OperatorSet.default, options: TokenResolverOptions.default, locale: myLocale)