计算/求值模块

官网地址:https://lcd4linux.bulix.org/wiki/Evaluator

计算/求值模块

计算/求值模块大概是LCD4Linux中最重要的特性和最激动人心的部分了。一般来说,它总是作为此系统中的一个子程序,用于计算表达式的值然后返回结果。在LCD4Linux内,几乎所有的东西都会用到计算/求值模块,所以,你几乎可以用表达式来做所有的事。

表达式只是一个简单的字符串,同时,表达式的结果也是一个字符串。 实际上,对于每个值,计算/求值模块都用了两种表示方法: 它以字符串形式储存,以浮点数形式用作数学计算。这两种表示方法有时会发生转化: 如果一个操作(例如:加法运算)需要(expects)一个数值参数,但是这个参数又是一个字符串, 这时这个参数会转化成浮点数,代替原来的参数。

如果你想要传递一个固定不变的字符串,那么你应该用单引号把它括起来(例如: ‘string’ ). 在这个字符串中,计算/求值模块能够识别出默认的转义序列,像是 \a (bell[响铃]),\b (backspace[空格]), \t (horizontal tab[水平制表符]), \n (new line[换行符]), \v (vertical tab[垂直制表符]), \f (form feed[换页符]), \r (carriage ret[回车符]), \\ 反斜杠本身,如果你想要使用单引号,那么它也应该转义,如: \',否则该单引号会被当成字符串的结尾。

另外,你也可以利用转义序列,使字符能够以八进制或者十六进制的形式表示(当你要在显示器上显示一些特殊标识字符时这个方法特别有用)

八进制表示方法是这样的:\ABC (3个八进制位数,反斜杠后面是数字0…7)。如果该序列有效的话,它将被替代(成你需要的特符);如果该序列无效,那么它将不会被替代。

十六进制表示方法是这样的:\xAB (一个或两个十六进制位数,数值为0…9,a…f或者A…F). 计算/求值模块将会优先尝试替代序列 \xAB (成特符),如果序列 \xAB 无效,它将会尝试替代序列 \xA (在这种情况下B将不变)。如果这两种情况都没能把序列替换掉,那它将不会被替代。 序列 \x0 (反斜杠后面没有跟随十六进制字符)或者序列 \x00 将会被删除,以避免字符串提前终止。

例如:'A\102C', 'A\x42C' 都可以表示字符串’ABC’ 。

注意:'name' (用单引号括着的)是一个字符串,而 name (无单引号)是一个变量!

学习计算/求值模块就必须了解一下运算符和函数的区别:运算符是计算/求值模块中固定的规则,而函数是可以在程序运行时添加的规则。这也就是 插件 所做的事:把一个或多个函数添加进计算/求值模块。

通过LCD4Linux的 “交互模式” ,你可以很容易地调试计算/求值模块: 打开电脑的命令窗口,运行> lcd4linux -i,你将会得到LCD4Linux的提示符界面,它将显示为 eval>, 输入表达式(例如:’2+3’),它将把结果显示出来(例如:’5’)。 这个模式在调试插件时会非常有用!要退出”交互模式“,只需按下 Ctrl-D 组合键即可。


运算符

操作符 描述 举例 结果
+ 加法 2 + 3 5
- 减法或负号 2 - 3 -1
. 字符串联结符 ‘Hi’ . ‘ ‘ . ‘there’ ‘Hi there’
* 乘法 2 * 3 6
/ 除法 6 / 2 3
% 取模(余数) 5 % 2 1
^ 2^3 8
== (数值)等于 2 == 3 0
!= (数值)不等于 2 != 3 1
< (数值)小于 2 < 3 1
<= (数值)小于等于 2 <= 3 1
> (数值)大于 2 > 3 0
>= (数值)大于等于 2 >= 3 0
eq (字符串)等于 ‘lcd’ eq ‘linux’ 0
ne (字符串)不等于 ‘lcd’ ne ‘linux’ 1
lt (字符串长度)小于 ‘lcd’ lt ‘linux’ 1
le (字符串长度)小于等于 ‘lcd’ le ‘linux’ 1
gt (字符串长度)大于 ‘lcd’ gt ‘linux’ 0
ge (字符串长度)大于等于 ‘lcd’ ge ‘linux’ 0
! 逻辑非(not) !0 1
\ 逻辑或(or) 1 0 1
& 逻辑与(and) 1 & 0 0
( ) 括号 2 * (3 + 4) 14
= 变量赋值 a=2+3 5
? : 条件赋值a?b:c a > 1024 ? ‘kB’ : ‘MB’ ‘kB’
; 表达式列表 2+3;2*3 6
, 逗号 (参数分隔符) func (2, 3)


函数

计算/求值模块内没有任何内置/内建函数,各种函数经由插件添加到该模块中去.其实,不仅是插件,显示类也能添加函数到计算/求值模块(所有特定的的显示功能都是以插件的形式来实现的)。例如:对比度,背光,通用输出(GPO’s),温度传感器,风扇速度值,设置(setting)等等…这在显示设备里有详细的说明。

一个函数可以含有多个参数,这取决于你的实际情况,需要在相应的文件中详细说明。

函数通常会返回一些东西,但它们可能会有一些副作用: 函数可以设置或者控制一些东西,或者触发一个动作,(例如:如果你的显示器可以通过软件控制背光,那么它(软件控制背光)将作为一个函数,而且它通常需要一个变量参数:LCD::backlight()返回当前的背光等级,同时,LCD::backlight(n)接收变量n,并把背光等级设为n)