前言:本文代码最终封装为godking库的f()函数:

函数名称:f (__,true/*包含全局变量*/,/*开始调用级*/)

函数说明:用对应的变量值,替换字符串中的“{变量名}”

参数1:包含变量名的字符串

参数2:是否包含全局变量(默认true)。否则仅限var声明的局部变量

参数3:从该调用级开始向上查找直到根级(1)范围内的局部变量。默认为调用f()函数的代码所在的层级。

返回值:处理后的结果文本

类似于python中的f"abc{var}def"表达式,如:

var num = 123;

var s = f("abcd{num}efgh")

则 s 的值为:abcd123efgh

表达式支持四种方式:

1:仅变量名,如: { i } 或 { namespace.i } ,优先顺序为:名字空间变量、局部变量、全局变量,找不到则返回 eval 进行计算的结果。

注意:如果变量名中含有点【.】如“a.b”,则视为名字空间变量,将跳过查找变量的步骤,直接用 eval 进行计算。

2:用变量名加 :% 表示格式化该变量,如 { i:%02f } 或省略% { i:02f },返回格式化结果。

3:用变量名加 := 表示包含该变量的公式,如 { i:=i+1 },返回公式计算结果。

注意:

a、全局变量可省略 := 符号,直接使用公式,如 { i+1 }(原理:先找名称为“i+1”的变量(先局部变量、后全局变量),因为找不到名称为 i+1 的变量,所以最后用 eval 进行计算并返回计算结果)。但建议直接使用纯公式 { =i+1 } 计算全局变量公式,这样可以跳过查找变量的步骤,直接取 eval 计算结果。

b、局部变量则必须要用 := 指定公式,如 { i:=i+1 }

4:用 = 开头,表示不查找变量值,纯公式计算,直接返回 eval 结果。如: { =(1+2)*3 }

注意:公式里面可包含全局变量名或名字空间变量名,不支持局部变量。

虽然省略 “ = ” 结果也一样,但使用 “ = ” 减少了“查找变量”的过程,直接返回 eval 结果,效率更高。

一:引言

假设已经声明好许多变量,如下:

// 各种变量(常量)
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可以模仿这种语法么?

受到 sunjichuancsdn的博客

《 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;
import godking
var s = "当前取到的变量的调用级为:{t}"
var t = "第一级"
var test = function(){var t = "第二级"import debugvar level=debug.callcount();//从本级向上找,直到根级1级。console.dump("从调用代码级("++level++")开始:",f(s)); console.dump("从调用代码级("++level++")开始:",f(s,,level));//从上一级向上找,直到根级1级。console.dump("从调用代码的上一级(1)开始:",f(s,,level-1));//从上上一级向上找,直到根级1级。console.dump("从调用代码的上上一级(0)开始:",f(s,,level-2));
}
test();
console.pause(true);

执行结果:

从调用代码级(2)开始:      当前取到的变量的调用级为:第二级
从调用代码级(2)开始:      当前取到的变量的调用级为:第二级
从调用代码的上一级(1)开始:        当前取到的变量的调用级为:第一级
从调用代码的上上一级(0)开始:      当前取到的变量的调用级为:

请按任意键继续 ...

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// 如果变量名以=开头,则执行eval操作,将eval结果作为变量值返回。
// 当然,=也可以省略,结果虽然一样,但中间多了“查找变量”的过程,理论上来说,效率变低。var s="({=3+6*8})({=console.color.red})({=..math.pi})"
console.dump(f(s)); console.pause(true);

执行结果:

(51)(12)(3.1415926535898)
请按任意键继续 ...

5、一个无聊的测试:

import console; var s="({s})"import godking
for(i=1;5;1){s = f(s)
}
console.dump(s)
console.pause(true);

执行结果:


四、库下载地址:

f() 函数代码封装于光庆扩展函数库中,请此处下载:

http://chengxu.online

aardio资源下载 ↔ _.rar ,解压缩后放到\lib\godking目录中。

aardio - f()函数通过变量名将变量值整合到一串文本中相关推荐

  1. php 方法里用外部变量的值,PHP实现函数内修改外部变量值的方法示例

    本文实例讲述了PHP实现函数内修改外部变量值的方法.分享给大家供大家参考,具体如下: 直接上代码,如下: $a_str = 'ab'; function change_val(){ global $a ...

  2. php使用使用外部变量的值,PHP实现函数内修改外部变量值的方法示例

    PHP实现函数内修改外部变量值的方法示例 本文实例讲述了PHP实现函数内修改外部变量值的方法.分享给大家供大家参考,具体如下: 直接上代码,如下: $a_str = 'ab'; function ch ...

  3. 环境变量 变量名 变量值_如何使用环境变量

    环境变量 变量名 变量值 Environment variables are a set of dynamic named values that can affect the way running ...

  4. 7-利用函数交换两个变量值的方法

    利用函数交换两个变量值的方法 1.利用一个中间变量 void Swap(int *p1,int *p2) {int temp=0;//定义一个中间变量temp=*p1;//把a的值赋给中间变量*p1= ...

  5. bat for 循环中定义变量(变量值不显示,通过使用「延期变量扩展」方式解决)

    ■前言 今天实现业务功能时,写了类似如下,第一个循环中的代码, @setlocal enabledelayedexpansion @echo off cd /d C:\test\temp\ tree ...

  6. 将控件关联的变量值传递到另外一个类中的方法

    今天在修改V1.1的一个bug:当向一个场景中加入已存的模型时会提示模型已存在,要求更改模型名称. 具体步骤如下: 1.新建一个对话框,ID为:IDD_RENAME,在此对话框中添加一个Edit控件, ...

  7. linux在哪里储存变量值,关于linux:在bash中,如何在变量中存储返回值?

    我知道Linux中一些非常基本的命令,并且正在尝试编写一些脚本. 我编写了一个函数,用于评估5位数字中最后2位数字的总和. 该函数应将最后的两位数之和连接起来并返回. 我想返回此值的原因是因为我将在其 ...

  8. %JAVA_HOME% bin,添加 Path 变量,变量值 :%JAVA_HOME%\\bin;%JAVA_HOME%\\ jre

    如果献血者认为自己可能不宜献血,应劝勉其参加献血.() 刘某晚上9时因在列车上醉酒滋事打人被乘警使用警绳控制,到次日早上4时酒醒,乘警随即对其结束约束,并对其询问至早上6时,乘警对刘某的询问查证时间没 ...

  9. c语言 交换两个变量 指针,C语言程序设计第5章“使用指针参数交换两个变量值”案例...

    使用指针参数交换两个变量值"案例C主讲教师崔玲玲 5.1 " [案例说明]用函数实现两个变量值的交换使其在主调函数 和被调函数中的值一致.要求用指针变量作为函数参数.程 序运行结果 ...

  10. C语言调用函数如何返回多个变量值?【基础】

    最近用到了一部分C/C++的相关知识,但是C/C++的函数只能返回一个变量值,如果要返回多个就很难做.经过多方面查找资料,发现如果想返回多个变量值一般只有两种方法: 设置指针和地址: 构造结构体: 设 ...

最新文章

  1. .net WCF简单实例
  2. Python 执行SQL带参数
  3. Tomcat 7 自动加载类及检测文件变动原理
  4. 设计桑基图_教你用pyecharts制作交互式桑基图,赶快学起来吧!
  5. JavaScript那些事儿(1):对比JavaScript和jQuery的Dom操作
  6. yii 字段验证的使用
  7. 错误:用脚本window.showModalDialog打开的页面,点击button时打开新窗口
  8. GIT — 使用回顾
  9. ssh远程执行命令 linux,【Linux】SSH 远程执行命令
  10. 面试题36:数组中的逆序对
  11. java后端参数默认值添加枚举_利用自定义Validator和枚举类来限定接口的入参
  12. AI学习笔记(十一)CNN之图像识别(上)
  13. Numpy系列(四)常用数学统计函数
  14. paip.调试js 查看元素事件以及事件断点
  15. 自动驾驶 10-1: 3D 几何和参考系3D Geometry and Reference Frames
  16. c语言二级安卓软件,C语言二级考试题库安卓下载-C语言二级考试题库APK下载 - Iefans...
  17. lwj_C#_作业 ListT应用
  18. Libcurl最初的实现tfp上传和下载功能
  19. s_p_a_r_k_内核
  20. oracle中drop和delete,oracle中delete drop truncate的用法和区别

热门文章

  1. 题解-[Usaco2005 Mar]Out of Hay 干草危机
  2. 基于深度卷积神经网络的图像超分辨率重建(SRCNN) 学习笔记
  3. go语言关于线程与通道channal
  4. 成功安装python后、在dos命令行窗口中-python在WIN运行时去掉DOS窗口显示的方法
  5. WordPress 前端投稿/编辑插件 DJD Site Post(支持游客和已注册用户)
  6. python3 爬虫入门 简单爬取京东商品名称案例 详细笔记说明
  7. 基于go的二维码签到系统
  8. 群晖Docker的高级操作
  9. SpaceSyntax【空间句法】之DepthMapX学习:第四篇 凸多边形图分析[未完]
  10. 赏析角度有哪些_几种分析的角度