M语言

编程入门 行业动态 更新时间:2024-10-27 18:21:26

M<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言"/>

M语言

 

目录

1.字符串

2.数字

3.小数

4.对象

5.布尔类型

6.日期


        Cache ObjectScript是一种无类型语言,不必声明变量的类型。任何变量都可以有字符串、数值或对象值。

1.字符串

  • 最大字符串大小是可配置的。默认情况下启用长字符串,长字符串的最大字符串大小是3641144个字符,否则最大字符串大小为32767个字符。可在Management Portal的【系统管理】-【配置】-【系统配置】-【内存和启动】里面配置是否启用长字符串
// 输出字符串的最大长度
w $system.SYS.MaxLocalLength()
  • 字符串可以包含任何字符,包括空格和控制字符。
  • 字符串长度指的是字符数,而不是字节数
// 输出11
w $length("hello world")
  • 可以使用$c($char缩写),来指定不可输入的字符
ClassMethod MyFunction10()
{set str = "abc"/// zzdump输出Ascall码zzdump str/// $c(0)代表空,$c(9)代表tab建(制表符),$c(10)代表换行,$c(13)代表回车w "",!set str = "a"_$c(0)_"bb"_$c(9)_"c"_$c(10)_"d"_$c(13)_"e"// 输出结果为:a bb	   c//            d//            ew str
}
  • 如果要在字符串中包含引号字符("),则需要两个“”,两个“”代表一个”
// 输出"
w """",!// 输出""
w """"""set str = "hello ""world"""
// 输出hello "world"
w str
  • 不包含任何值的字符串称为空字符串。它由两个引号表示。空字符串被视为已定义的值,它的长度是0。空字符串和$c(0)不同,如下所示:
ClassMethod MyFunction()
{set str = ""// 输出0w "空字符串长度:"_$length(str),!set str = $c(0)// 输出1w "$c(0)字符串长度:"_$length(str)
}
  • 可以使用连接运算符(_)将两个或多个字符串连接在一起。
// 输出helloworld!
w "hello"_"world"_"!"
  • 可以使用等于(=)和不等于('=)运算符来比较两个字符串。字符串的比较区分大小写。如果字符串为数字,则只有包含规范形式的数字的字符串才等于其相应地数字(-0不是规范数字)
ClassMethod MyFunction()
{// 输出1w "hello" = "hello"// 输出0w "world" '= "world"// 输出0w "-8" = 8,!// 输出1w "8" = 008.00,!// 输出1w "-8" = -8// 输出0w "-0" = 0,!// 输出0w "-0" = -0
}
  • >、<、<=、或>=运算符不能用于字符串的比较。这些运算符将字符串视为数字,并始终执行数字比较。使用这些运算符进行比较时,将任何非数字字符串分配数值0
// 输出0
w "x" > 1
// 输出1
w "2x" > 1
// 输出0
w "x2x" > 1

2.数字

  • 数字前面和后面可以加0
// 输出9
w 0009.00
  • 字母E,用于科学计数法:
// 输出 35000000000
w 3.5E10
  • 数字前面可以加+和-。但是不能出现在除了科学计数法E之外的其他字符的后面
ClassMethod MyFunction14()
{// 输出-200w -2E2,!// 输出-.02w -2E-2,!// 输出-200w -2E+2,!// 输出200w 2E+2,!// 输出.02w 2E-2,!
}
  • Cache将数字转换为规范形式时,会将数字前面和后面的0去掉。使用$fn和$justify,将去掉的0恢复,并可以指定保留几位小数
// 输出.066
w 0.066000,!//使用$fn和$justify,将去掉的0恢复,并可以指定保留几位小数
// 输出0.066
w $fn(.066, "N", 3),!
// 输出0.0660
w $justify(.066, "N", 4)
  • 对于算术运算、大于/小于运算,如果字符串是规范形式的数字,则在功能上与相应地数字相同
ClassMethod Number()
{set x = 0009.00// 输出1w "数字长度:"_$length(x),!// 输出9w "数字值:"_x,!// 输出1w "是否与9相等:",x=9,!// 输出10w "+1:",x+1,!// 定义数字字符串set y = "0009.00"// 输出7w "数字长度:"_$length(y),!// 输出0009.00w "数字值:"_y,!// 输出0w "是否与9相等:",y=9,!// 输出10w "+1:",y+1,!//输出1w "003"+3 = 6,!//输出1w "++-3" + -3 = -6,!//输出1w "003" > 2,!//输出1w "++-003" >= -3
}
  • 混合数字字符串:指的是以数字字符开头,后面跟一个或多个非数字字符的字符串。在进行数值或布尔运算时(等式运算除外),将会从前往后匹配,如果遇到不规范非数字字符,则停止匹配,后面的字符将会被忽略。
ClassMethod Command()
{// 输出24w "22 hello" + 2,!// 输出24w "+22/77" + 2,!// 输出24w "22.000" + 2,!// 输出24.5w "22.5.99" + 2,!// 输出24w "22.s.8" + 2,!
}
  • 非数字字符串:指的是再遇到数字字符串之前,遇到的非数字字符串的任何字符串,空格也被视为非数字字符串。数值和布尔运算通常会将非数字字符串解析为数值0
ClassMethod MyFunction()
{// 输出1w +"8" = 8,!// 输出1w +"+0008" = 8,!// 输出1w +"8 num" = 8,!// 输出1w +"num" = 0,!// 输出1w +"" = 0,!
}
  • 可以使用连接运算符(_)将多个数字连接起来。Cache会首先将每个数字转换为其规范形式,然后对结果执行字符串连接
ClassMethod MyFunction()
{// 输出1234w 12_34,!// 输出1234w 12_+34,!// 输出1234w 12_--34,!// 输出12.0134w 12.01_34,!// 输出.0134w 0.01_34,!// 输出1234.55w 12_0034.55,!// 输出12034w 12E1_34,!// 输出1212.3w 12_"12.3"
}

3.小数

  • 默认情况下,Cache使用$decimal表示浮点小数。它提供最高级别的精度,保留19位。
ClassMethod MyFunction2()
{// 输出.3333333333333333333w 1/3,!// 输出.3333333333333333333w $decimal(1/3),!// NAN表示非数字,输出0w $decimal("NAN"),!// INF表示无穷大,输出0w $decimal("INF"),!
}
  • $double表示双精度浮点小数。它的精度为53个二进制位,相等于只能保证小数后16位精度。支持特殊值INF(无穷大)和NAN(非数字)
ClassMethod MyFunction3()
{// 输出.33333333333333331482w $double(1/3),!// 输出NANw $double("NAN"),!// 输出INFw $double("INF"),!
}

        从上面可以看出,在第17位时,开始不准确。

 

  • Cache中,最大整数范围为:-9223372036854775808和9223372036854775807。如果对最大整数增加值,则会进行四舍五入,将低位数字替换为0
ClassMethod MyFunction4()
{// 输出9223372036854775810w 9223372036854775807+1,!// 输出9223372036854775830w 9223372036854775807+23,!// 输出9223372036854775830w 9223372036854775807+25,!// 输出1w (9223372036854775807+23)=(9223372036854775807+25),!
}

4.对象

  • 通过%New命令,定义一个对象
Class Demo.Obj Extends %RegisteredObject
{Property Name As %String;/// d ##class(Demo.Obj).Command()
ClassMethod Command()
{// 定义对象,将对象的引用给obj变量set obj = ##class(Obj).%New()// 输出15@Demo.Objw obj,!
}}
  • 使用$isobject判断是否为对象
// 输出1
w $isobject(obj)// 输出0
w $isObject("123")
  • 定义多个同一个对象时,会产生增加对象的内部引用计数
set obj = ##class(Obj).%New()
// 输出16@Demo.Obj
w obj,!set obj2 = ##class(Obj).%New()
// 输出16@Demo.Obj
w obj2,!/* 输出如下:
obj=<OBJECT REFERENCE>[15@Demo.Obj]
+----------------- general information ---------------
|      oref value: 16
|      class name: Demo.Obj
| reference count: 2
+----------------- attribute values ------------------
|               Name = ""
+-----------------------------------------------------
*/
zw obj2
  • 当对象的引用数量为0时,Cache会自动销毁该对象(调用%OnClose()方法,并将其从内存中移除)。OnClose()方法如下:
/// This callback method is invoked by the <METHOD>%Close</METHOD> method to 
/// provide notification that the current object is being closed.
/// 
/// <P>The return value of this method is ignored.
Method %OnClose() As %Status [ Private, ServerOnly = 1 ]
{Quit $$$OK
}

5.布尔类型

        在M语言中,布尔类型为1(true)和0(false)

ClassMethod MyFunction()
{set num = 1// 输出trueif (num) {w "true",!	}else{w "false",!}// 输出trueif 0.5 {w "true",!	}else{w "false",!}// 输出trueif "1 num" {w "true",!	}else{w "false",!}// 输出0w "007"=7,!// 输出0w "+007"=7,!// 输出1w +"007"=7,!// 输出falseif "num" {w "true",!	}else{w "false",!}
}

6.日期

        Global中的日期和时间都是以数字的形式存储的。

  • ObjectScript没有内置的日期类型,但是它由很多函数,用于操作和格式化表示为字符串的日期值
  • $horolog(缩写$h):包含了当前进程的本地日期和时间,以逗号(,)分隔。第一部分是日期的数字,它是从1840年12月31日开始计算的数字;第二部分是秒的数字,它是从午夜开始计算的。
ClassMethod MyFunction()
{// 输出66328,46923w $horolog,!
}
  • $now:返回当前日期的本地日期和时间,以小数秒为单位
// 输出66328,51253.643677
w $now(),!
  • $zdate(缩写$zd):验证日期,并将其从数字格式转换为显示指定的日期格式
  • $zdateh(缩写$zdh):将日期格式转换为时间格式

$zd(日期数字,格式)->日期

$zdh(日期,格式) -> 数字

// 输出08/07/2022
w $zdate($horolog),!
// 输出2022-08-07
w $zd($horolog, 3),!// 输出66328
w $zdateh("08/07/2022"),!
// 输出66328
w $zdh("2022-08-07", 3),!
// T表示当天, 输出66328
w $zdh("T", 5),!
  • $ztime(缩写$zt):验证时间,并将其从数字格式转换为显示指定的时间格式
  • $ztimeh(缩写$zth):将时间格式转换为时间格式

$zt(时间数字,格式)->时间

$zth(时间,格式) -> 数字

// 输出14:27:02
w $ztime($p($horolog, ",", 2)),!// 输出02:27:02PM
w $zt($p($horolog, ",", 2), 3),!// 输出52022
w $ztimeh("14:27:02"),!
// 输出52022
w $zth("02:27:02PM", 3),!
  • $zdatetime(缩写$zdt):验证日期和时间,将数字转换为日期和时间

$zdt(日期和时间数字,格式)->日期和时间

$zdth(日期和时间,格式) ->日期和时间数字

// 输出08/07/2022 14:33:36
w $zdatetime($h),!
// 输出2022-08-07 14:33:36
w $zdt($h, 3),!// 输出66328,52416
w $zdatetimeh("08/07/2022 14:33:36"),!
// 输出66328,52416
w $zdatetimeh("2022-08-07 14:33:36", 3),!
// 输出66328,0
w $zdth("T", 5),!
  • $zhorolog(缩写$zh):返回启动Cache库以来,经过的秒数。
// 输出101268.602726
w $zhorolog,!// 输出28.13016890888888889
w $zhorolog/3600,!

        $zhorolog还可以用于计算程序运行的时间:

set t1 = $zh//等待2秒钟
hang 2set t2 = $zh// 输出2.000593
w t2 - t1

更多推荐

M语言

本文发布于:2023-07-03 10:41:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1005254.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!