随笔分类 - Silverlight
摘要:以上四节,我们实现了一个混合表达式的解析和求值过程,效果很不直观,所以这节我们做一个简单的动画来演示整个过程吧,以显得工作不那么虎头蛇尾:)这里有两个过程需要演示,解析过程和求值过程。先说解析过程吧,我们已经按解析的顺序把Nodes存入了Calculator的FoundNodes里面,常量和者变量(x)是最底层的Node,所以没有依赖到更底层的Node,其他的Node则依赖于其他的一些Nodes。如果把这种依赖关系画成图,则是一个树形结构,树的根节点就是我们最后解析出来的Node。树的类型可以根据拥有最大依赖节点数的节点确定,如果只有二元的,则树是二叉树,如果用到了多个参数的函数如(Max(1
阅读全文
摘要:在表达式中加入变量有什么用呢?看看下图就知道了:含有x的表达式无法直接求值,需要先对x进行赋值,例如对于(y=x*x)不断的赋值、取值,可以绘制出一一列点(x,y),从而可以绘制出平滑的抛物线。所以,XNode节点必须有个可赋值的属性:XValue,而且应该是静态的,以下是XNode的定义(超级简单,是不是?): public class XNode : NodeBase { public static double XValue { get; set; } public XNode(int index, string data, string expr...
阅读全文
摘要:四则混合运算已经实现,变成五则(例如加入幂)是小Kiss啦,这里就不再阐述了。这节中,我们在表达式中混入System.Math中定义的一些数学函数,如Sin(),Abs()等,要求在不改变原有节点和节点解析类的情况下加入新的函数节点和函数节点解析类,以此来检测我们之前的设计是否稳健,首先还是测试用例: [TestMethod] public void TestCalculator2() { //数学函数与混合运算 var calculator = new Calculator(); va...
阅读全文
摘要:四则混合运算的程序相信大家在学习编程的时候都写过,这里采用面向对象的方式重新设计一下这个程序,作为数学引擎的第一个功能模块。本文用到的相关技术细节主要有以下几点,读者如果没有涉及到的话,可以先参考一下相关的技术资料:TDD(测试驱动开发):本文只是将其作为一个完整的项目开发的一部分简单提及。设计模式:真正的面向对象设计必然遵循了一种或几种模式,本文会适当地方加以注释。正则表达式:仅用到非常简单的正则式用于表达式解析,如果对正则表达式不了解,花20分钟速成一下即可掌握:)LINQ:寡人已经无法不用Linq了,如果不熟悉,给你推荐两个学习工具:LinqPad和ReSharper.Reflector
阅读全文
摘要:异常消息:Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.被测项目(MathEngine)是Silverlight窗体项目,MathEngine.App和MathEngine.MainPage分别是默认的应用程序类和主窗体类,因此包含了System.Windows的引用。而测试项目(MathEngineTests)默认为非窗体项目,并没有添加对System.Windows的引用。添加引用:C:\Program Files
阅读全文
浙公网安备 33010602011771号