[作者:Surpassme]常见的算术操作符主要如下所示:
| 操作符 | 说明 | 示例 |
|---|---|---|
| + | 相加 | 1+2=3 |
| - | 相减 | 1-2=-1 |
| * | 相乘 | 2*2=4 |
| / | 相除 | 3/2=1.5 |
| % | 求余 | 3%2=1 |
| ** | 求幂 | 3**2=9 |
[作者:Surpassme]常见的赋值算术操作符主要如下所示:
| 操作符 | 说明 |
|---|---|
| += | 相加并赋值 |
| -= | 相减并赋值 |
| *= | 相乘并赋值 |
| /= | 相除并赋值 |
| %= | 求余并赋值 |
| **= | 求幂并赋值 |
[作者:Surpassme]常见的关系操作符主要如下所示:
| 操作符 | 说明 |
|---|---|
| == | 等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| === | 绝对等于 |
| !== | 绝对不等于 |
[作者:Surpassme]常见的逻辑操作符主要如下所示:
| 操作符 | 说明 |
|---|---|
| && | 逻辑与 |
| | | | 逻辑或 |
| ! | 逻辑非 |
[作者:Surpassme]Groovy中的三元操作符,其基本语法如下所示:
判断条件?条件成立的结果:条件不成立的结果
该操作符功能等同于if-else
示例结果如下所示:
def result=30>28?true:false
println "result is ${result}" // true
[作者:Surpassme]常见的自增操作符主要如下所示:
| 操作符 | 说明 |
|---|---|
| ++ | 自增 |
| -- | 自减 |
[作者:Surpassme]Groovy中的if-else基本语法结构如下所示:
if (表达式){
// 执行语句
} else if (表达式) {
// 执行语句
} else {
// 执行语句
}
def env="test"
if(env == "test"){
println "current env is ${env}"
} else if(env == "dev"){
println "current env is ${env}"
} else if(env == "release"){
println "current env is ${env}"
} else {
println "unknown env"
}
def personInfo=[:]
if (personInfo.isEmpty()){
println "personInfo is empty:${personInfo} "
} else {
println "personInfo value :${personInfo} "
}
[作者:Surpassme]Groovy中的switch-case基本语法结构如下所示:
switch (变量值){
case 条件1:
// 执行语句或表达式
break
case 条件2:
// 执行语句或表达式
break
case 条件3:
// 执行语句或表达式
break
case [条件3,条件4,条件5]:
// 执行语句或表达式
break
default:
// 执行语句或表达式
}
def variable = swithc (变量值){
case 条件1 -> "结果1"
case 条件2 -> "结果2"
case 条件3 -> "结果3"
case 条件4 -> "结果4"
}
def env="test"
switch (env){
case "test":
println "current env is ${env}"
break
case "dev":
println "current env is ${env}"
break
case "release":
println "current env is ${env}"
break
default:
println "unknown env"
}
def env="dev"
switch (env){
case ["test","dev"]:
println "current env is test or dev ,not release yet"
break
case "release":
println "current env is ${env}"
break
default:
println "unknown env"
} println "unknown env"
}
def env="test"
def currentEnv=switch (env){
case "test" -> "current env is test"
case "dev" -> "current env is dev"
case "release" -> "current env is release"
}
println currentEnv
[作者:Surpassme]经典for语句,其语法结构如下所示:
for ( init; condition; increment )
{
// statement
}
[作者:Surpassme]for-in其语法结构如下所示:
for ( item in Object)
{
// statement
}
[作者:Surpassme]while其语法结构如下所示:
while(condition){
// statement
}
[作者:Surpassme]do-while其语法结构如下所示:
do {
// statement
} while(condition)
示例如下所示:
def hello="Hello,Surpass"
def helloSplit=hello.split(",")
for(def i=0; i < helloSplit.length;i++) {
println helloSplit[i]
}
def personInfoMap=[name:"Surpass",age:28,loc:"Shanghai"]
for (item in personInfoMap){
println "Key is : ${item.key},value is :${item.value}"
}
def personInfoList=["Surpass",28,"Shanghai"]
for (item in personInfoList){
println "current itme is ${item}"
}
def (endNumberA,endNumberB,sumA,sumB)=[100,100,0,0]
while (endNumberA > 0){
sumA+=endNumberA
endNumberA--
}
do{
sumB+=endNumberB
endNumberB--
}while (endNumberB > 0)
[作者:Surpassme]Groovy中的函数基本语法如下所示:
def functionName(parasA,...,parasN=defaulValue){
// 执行语句
return parasA
}
简要说明如下所示:
def默认值,如果没有值传给参数,则使用默认值、如果参数即存在非默认参数和默认参数,则默认参数必须位于参数列表的末尾进行定义
return返回,如果没有return语句,则默认使用最后一个表达式的值做为返回值函数也可以一次性返回多个值,可以使用多变量赋值进行接收
示例如下所示:
def hello(name){
return "Hello,${name}"
}
println hello("Surpass") // Hello,Surpass
def hello(name,city="Shanghai"){
return "Hello,${name},welcome to ${city}"
}
println hello("Surpass") // Hello,Surpass,welcome to Shanghai
println hello("Surpass","Wuhan") // Hello,Surpass,welcome to Wuhan
def hello(name,city="Shanghai"){
def testStr="Test no return "
helloStr="Hello,${name},welcome to ${city}"
}
println hello("Surpass","Wuhan") // Hello,Surpass,welcome to Wuhan
def hello(name,city="Shanghai"){
helloStr="Hello,${name},welcome to ${city}"
def testStr="Test no return "
}
println hello("Surpass","Wuhan") // Test no return
def hello(name,city="Shanghai",from="Wuhan",to="Shenzen"){
return [name,city,from,to]
}
def (name,city,from,to)=hello(name="Surpass")
println "name:${name},city:${city},from ${from},to ${to}" // name:Surpass,city:Shanghai,from Wuhan,to Shenzen
原文地址:https://www.jianshu.com/p/e59130bfbc16?v=1670776731178
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion