我是編程新手。我想向ddmathparser
添加一些新功能,例如衍生產品和集成。我能找到的唯一一個是關於ddmathparser
的維基頁面https://github.com/davedelong/DDMathParser/wiki/Adding-New-Functions的簡短教程。然而,我無法遵循它,因爲它太短,讀了好幾遍之後,我仍然不明白它在做什麼。那麼,任何人都可以詳細說明添加新功能的步驟,或者給我更詳細的教程嗎? 我真的做了我的研究,但我找不到一個。非常感謝。任何人都可以指向在ddmathparser中添加新函數的教程嗎?
1
A
回答
1
DDMathParser作者在這裏。
這裏是你如何添加multiply by two
功能:
DDMathEvaluator *evaluator = [DDMathEvaluator sharedMathEvaluator];
// a function takes arguments, variable values, the evaluator, and an error pointer
// and returns a new expression
[evaluator registerFunction:^DDExpression *(NSArray *args, NSDictionary *vars, DDMathEvaluator *eval, NSError *__autoreleasing *error) {
DDExpression *final = nil;
// multiplyBy2() can only handle a single argument
if ([args count] == 1) {
// get the argument and simply wrap it in a "multiply()" function
DDExpression *argExpression = [args objectAtIndex:0];
DDExpression *twoExpression = [DDExpression numberExpressionWithNumber:@2];
final = [DDExpression functionExpressionWithFunction:DDOperatorMultiply arguments:@[argExpression, twoExpression] error:nil];
} else if (error) {
// there wasn't only one argument
NSString *description = [NSString stringWithFormat:@"multiplyBy2() requires 1 argument. %ld were given", [args count]];
*error = [NSError errorWithDomain:DDMathParserErrorDomain code:DDErrorCodeInvalidNumberOfArguments userInfo:@{NSLocalizedDescriptionKey: description}];
}
return final;
} forName:@"multiplyBy2"];
現在你可以這樣做:
NSNumber *result = [@"multiplyBy2(21)" stringByEvaluatingString];
,並取回@42
。
這是怎麼回事:
內部,DDMathEvaluator
基本上有一個大NSDictionary
,保存着所有它知道的功能列表,鍵控關閉該功能的名稱,種類如下:
_functions = @{
@"multiply" : multiplyFunctionBlock,
@"add" : addFunctionBlock,
...
};
(顯然,這是比這更復雜一點,但是這是基本的想法)
當評估Ë評估一個字符串並且遇到一個函數,它在這個字典中查找該函數的塊是什麼。它檢索塊,然後用字符串中的參數(如果有的話)執行該塊。該塊的結果是該函數的結果。
該結果被替換回來,評估繼續。
相關問題
- 1. 任何人都可以在Delphi或FreePascal中指向AMF庫嗎?
- 2. 任何人都可以幫助解決這個DDMathParser新功能嗎?
- 3. 任何人都可以指向一個winforms原型工具嗎?
- 4. 任何人都可以指向CSLA應用程序在網上直播嗎?
- 5. 任何人都可以教我嗎?mysql的連接表
- 6. 任何人都可以指向我一個很好的Microsoft Sync Framework v2教程嗎?
- 7. 任何人都可以將我指向Drupal $ account-> content數組的參考嗎?
- 8. 任何人都可以加快我的MySQL存儲過程嗎?
- 9. 有人可以指向一個bitbake或openembedded教程嗎?
- 10. 任何人都可以提出一個很好的教程,學習在Angularjs中構建自定義指令嗎?
- 11. 任何人都可以給我看顯示標籤的好教程嗎?
- 12. 任何人都可以在webapps中幫助緩存過程嗎?
- 13. 任何人都可以解釋OAuth嗎?
- 14. 任何人都可以幫助我嗎?
- 15. 任何人都可以處理它嗎?
- 16. 任何人都可以糾正它嗎?
- 17. 任何人都可以解釋在Python中的lambda函數?
- 18. 任何人都可以在CodeSmith SchemaExplorer.ViewSchema構造函數中解釋參數嗎?
- 19. 任何人都可以指向解釋堆棧機器的C#代碼嗎?
- 20. 任何人都可以指向我的Spring MVC,Tiles,Freemarker集成示例嗎?
- 21. 任何人都可以描述範圍的流程流程嗎?
- 22. 任何人都可以將我指向Office2007Blue.xaml主題?
- 23. 任何人都可以告訴我如何將java庫添加到monodroid中嗎?
- 24. 任何人都可以幫助我在一行中寫這個函數嗎?
- 25. 任何人都可以向我解釋這個sed命令嗎?
- 26. 任何人都可以向我展示一些Veracity用例嗎?
- 27. 任何人都可以向Entity Framework生命週期解釋嗎?
- 28. 任何人都可以用英語向我解釋這個嗎?
- 29. 任何人都可以向我解釋這個SOQL查詢嗎?
- 30. 任何人都可以解釋我在jQuery中的函數的執行過程
謝謝。現在我明白這是如何工作的。那麼我應該在哪裏放置代碼?在需要該功能的文件中還是在DDMathParser文件之一中? – zyl1024 2013-03-24 14:48:43
@ zyl1024把它放在你自己的代碼中。 – 2013-03-24 14:50:13
謝謝,尤其是對於添加的解釋。 – zyl1024 2013-03-24 15:31:53