当前位置:网站首页>Aardio - 通过变量名将变量值整合到一串文本中
Aardio - 通过变量名将变量值整合到一串文本中
2022-07-06 14:39:00 【卢光庆】
一:引言
假设已经声明好许多变量,如下:
// 各种变量(常量)
console.name = "张三" //成员变量
::age = 18 //全局变量
..sex = "男" //全局变量
var score = 90 //局部变量
var t = { //数组
结果 = "优秀";
评语 = "很好,nice,继续努力!";
}
_OK = "惊不惊喜?" //全局常量如果我们要将他整合到一串文本中,比如sql语句之类的,通常做法是:
var s = ..string.format('姓名:%s\n年龄:%s\n性别:%s\n成绩:%s\n结果:%s\n备注:%s'
,console.name,age,sex,score,..table.tostring(t),_OK);执行结果:

或:
var s = ..string.format(
`姓名:%s
年龄:%s
性别:%s
成绩:%s
结果:%s
备注:%s`,
console.name,age,sex,score,..table.tostring(t),_OK);执行结果:

二、基本解决方案:
貌似这样已经非常方便了。
但是python有个更加方便,最重要的是,非常直观的格式化字符串的方法:f
f-string
一种格式化字符串的方法,使用以
f开头的字符串,称之为f-string,它和普通字符串不同之处在于,字符串如果包含{xxx},就会以对应的变量替换:>>> r = 2.5 >>> s = 3.14 * r ** 2 >>> print(f'The area of a circle with radius {r} is {s:.2f}') The area of a circle with radius 2.5 is 19.62上述代码中,
{r}被变量r的值替换,{s:.2f}被变量s的值替换,并且:后面的.2f指定了格式化参数(即保留两位小数),因此,{s:.2f}的替换结果是19.62。
将变量名称放在它应该在的最合适的位置, 让易读性变得非常强。
那么,用aardio可以模仿这种语法么?
《 aardio调试库解决局部变量的有趣问题(一)_aardio笔记的博客-CSDN博客_aardio》
一文启发(在此表示感谢),我们模仿f-string,造一个 f() 函数,实现这个功能,来看看下面这个语句:
重点来了:

是不是非常接近了!!
自己构造一个语句试试:
var s = f('姓名:{console.name}\n年龄:{age}\n性别:{sex}\n成绩:{score}\n结果:{t}\n备注:{_OK}')想想执行结果是啥?看看:

或:
var s = f(
`姓名:{console.name}
年龄:{age}
性别:{sex}
成绩:{score}
结果:{t}
备注:{_OK}`)执行结果:

三、更多用法:
是不是看着很舒服?变量名称所在的位置,一目了然,阅读起来非常舒服。
再看更多详细用法:
1、格式化文本:
import console;
var t = "ABCD"
var num = 456
var num2 = 12345678
var s="({t:10s})({num:10.2f})({num2:X})"
import godking
console.dump(f(s))
console.pause(true);执行结果:

2、排除函数层次:
import console;
var t = "ABCD"
var num = 456
var num2 = 12345678
var s="({t:10s})({num:10.2f})({num2:X})"
import godking
var test = function(){
var t = "EFGH" // 优先找最近层次的变量值,找到 "EFGH" 而不是 "ABCD"
var num = 890 // 优先找最近层次的变量值,找到 890 而不是 456
console.dump("包含本层函数内变量:",f(s)); //不排除任何函数层,包含本层变量。
console.dump("不包含本层函数内变量:",f(s,,1)); //排除本层函数(test函数,1层)变量。
console.dump("排除2层函数内变量:",f(s,,2)); //排除自本层往上2层函数变量。
// 排除2层的意思是:不但不包括本层函数(test函数,1层)变量,
// 也不包括上层函数(2层)变量,这已经是最顶层了,
// 所以,都排除了,结果就是没找到变量的值。
}
test();
console.pause(true);执行结果:

3、不包括全局变量:
import console;
t = "ABCD";
::num = 1111;
..num2 = 456
var 局部变量 = "我是局部变量"
var s="({t:10s})({num:10.2f})({num2:X})({局部变量})"
import godking
console.dump("包含全局变量:",f(s));
console.dump("不包含全局变量:",f(s,false));
console.pause(true);
执行结果:

4、高级玩法:
import console;
import godking
// 如果 f 函数在“包含全局”设置(默认)下,
// 指定变量既不是局部变量,也不是全局变量,
// 则执行eval操作,将eval结果作为变量值返回。
var s="({3+6*8})({console.color.red})({..math.pi})"
console.dump(f(s));
console.pause(true);执行结果:

5、一个无聊的测试:
import console;
var s="({s})"
import godking
for(i=1;5;1){
s = f(s)
}
console.dump(s)
console.pause(true);
执行结果:

四、库下载地址:
f() 函数代码封装于光庆扩展函数库中,请此处下载:
aardio资源下载 _.rar ,解压缩后放到\lib\godking目录中。
边栏推荐
- Seata aggregates at, TCC, Saga and XA transaction modes to create a one-stop distributed transaction solution
- Force deduction question 500, keyboard line, JS implementation
- 墨西哥一架飞往美国的客机起飞后遭雷击 随后安全返航
- Management background --5, sub classification
- Xiaoman network model & http1-http2 & browser cache
- GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)
- NetXpert XG2帮您解决“布线安装与维护”难题
- 将MySQL的表数据纯净方式导出
- 2022-07-05 stonedb的子查询处理解析耗时分析
- Oracle-控制文件及日志文件的管理
猜你喜欢

硬件開發筆記(十): 硬件開發基本流程,制作一個USB轉RS232的模塊(九):創建CH340G/MAX232封裝庫sop-16並關聯原理圖元器件

自制J-Flash烧录工具——Qt调用jlinkARM.dll方式

GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)

0 basic learning C language - interrupt

Mise en place d'un environnement de développement OP - tee basé sur qemuv8

CCNA Cisco network EIGRP protocol

手写ABA遇到的坑

C#實現水晶報錶綁定數據並實現打印4-條形碼

硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件

剪映+json解析将视频中的声音转换成文本
随机推荐
Support multiple API versions in flask
0 basic learning C language - digital tube
Classic sql50 questions
[sciter]: encapsulate the notification bar component based on sciter
【sciter Bug篇】多行隐藏
[Digital IC hand tearing code] Verilog burr free clock switching circuit | topic | principle | design | simulation
Leetcode question brushing (XI) -- sequential questions brushing 51 to 55
Oracle-控制文件及日志文件的管理
小程序系统更新提示,并强制小程序重启并使用新版本
ResNet-RS:谷歌领衔调优ResNet,性能全面超越EfficientNet系列 | 2021 arxiv
软考高级(信息系统项目管理师)高频考点:项目质量管理
中国固态氧化物燃料电池技术进展与发展前景报告(2022版)
GPS from getting started to giving up (XX), antenna offset
[MySQL] online DDL details
二叉(搜索)树的最近公共祖先 ●●
About the professional ethics of programmers, let's talk about it from the way of craftsmanship and neatness
The SQL response is slow. What are your troubleshooting ideas?
Data storage (1)
BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用
Research and investment strategy report of China's VOCs catalyst industry (2022 Edition)