基於JavaScript的公式解譯器 – 5 【一元操作符的實現】

來源:互聯網
上載者:User

OperatorUnaryBase 一元操作符基底類型

檔案: OperatorUnaryBase.js

function OperatorUnaryBase() {<br /> this.DeriveFrom(new OperatorBase());<br /> this.set_ClassName("OperatorUnaryBase");<br /> this._type = new UnaryType("undefined");<br />};</p><p>OperatorUnaryBase.prototype.GetOneNumberOperand = function(operands) {<br /> var operand = operands.pop();</p><p> if (!(operand.IsNumber() || operand.IsBoolean()))<br /> throw new Exception(this, "GetOneNumberOperand", "Unsupported type:" + $T(operand));</p><p> return operand;<br />}; // prototype</p><p>// --------------- TEST ------------------------<br />OperatorUnaryBase.prototype.Test = function() {<br /> $Debug.WriteLine("=================== " + this.get_ClassName() + " =====================");</p><p> var values = [<br /> -1,<br /> 0,<br /> 1,<br /> -99999,<br /> 99999,<br /> true,<br /> false,<br /> "ABCDEFG"<br /> ];</p><p> for (var i = 0; i < values.length; i++) {<br /> try {<br /> var operand = new OperandBase(values[i]),<br /> res = this.Evaluate([operand]);</p><p> $Debug.WriteLine(<br /> this.get_Sign() + operand.ToString() +<br /> "[" + $T(values[i]) + "] =" + res.ToString());<br /> }<br /> catch (e) {<br /> $Debug.WriteLine(<br /> "Failed:" +<br /> this.get_Sign() + values[i].ToString() + " [" + $T(values[i]) + "]" +<br /> "/nError:" + e.description);<br /> }<br /> } // for<br />}; // function Test<br />

 

一元操作的實現

主要為'+', '-',其他的像'!','~'在後續檔案中。

檔案:OperatorUnary.js

function OperatorPositive() {<br /> this.DeriveFrom(new OperatorUnaryBase());<br /> this.set_ClassName("OperatorPositive");<br /> this.set_Sign("+");<br />};</p><p>OperatorPositive.prototype.Evaluate = function(operands) {<br /> var val = this.GetOneNumberOperand(operands);</p><p> return new OperandNumber(val.get_Value());<br />};</p><p>function OperatorNegative() {<br /> this.DeriveFrom(new OperatorUnaryBase());<br /> this.set_ClassName("OperatorNegative");<br /> this.set_Sign("-");<br />};</p><p>OperatorNegative.prototype.Evaluate = function(operands) {<br /> var val = this.GetOneNumberOperand(operands);</p><p> return new OperandNumber(-val.get_Value());<br />};

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.