请把不听话的【return】关进【class】这个笼子
请把不听话的【return】关进【class】这个笼子
问:powershell 最垃圾的语句是什么?
答:(函数中的)return
#例子1:函数中的return有时会返回所有内容,而不是你想要的内容,如:
function aaa
{
return 'bbb'
} function ccc
{
aaa
return 'ddd'
} ccc #ccc函数不光返回了我们想要的值ddd,还把aaa函数的返回值bbb返回了。
-----------------我们心目中return的作用--------------------
我们用return想实现2个功能:
1 只返回1---n 个,我们想要的结果。
2 结束当前函数。-----这个功能可以用空的return来实现。
总之,不建议在函数中,用return后面加变量返回内容。
---------------解决方案1---------------
函数中有return,函数中又用了.net方法的情况。请在.net方法前加[void],这样就不会带出多余数据。
powershell 传教士 原创文章 2014-07-18 2014-10-10 2015-03-22 2016-02-27更新,允许转载,但必须保留名字和出处,否则追究法律责任
---------------解决方案2 貌似不灵---------------
使用
return ,$我想要的返回值
或
return @(,$我想要的返回值)
---------------解决方案3 在函数外面,用 -is [array]判断返回值是单一,还是多个。推荐 ---------------
#例子2:
if ($函数名 -is [array])
{
$我想要的返回值 = $函数名[-1]
}
else
{
$我想要的返回值 = $函数名
}
---解决方案3变种,既然返回值或许是数组,那么就可以取第一个,或最后一个值---
#例子3:有个缺点,必须明确知道返回值个数才行。
function 函数a
{
$a = 1
$b = 2
$c = 3
return $a,$b,$c
}
$d,$e,$f = 函数a #函数返回的值,我全要 $g,$null,$null = 函数a #我只想要函数返回的第一个值
$null,$null,$h = 函数a #我只想要函数返回的最后一个值
write-host $d,$e,$f,$g,$h
---------------解决方案4 diy,直接写入外部变量---------------
不用return,而用自定义的return2函数,和自定义变量$global:return2保存要返回的内容。
#例子4:直写外部变量
function return2($youwant)
{
$global:return2 = $youwant
} function aaa
{
return 'aaa'
} function bbb
{
aaa
return2 'bbb' #把返回值写入,或者直接写变量$global:return2 = 'bbb'
return
write-host "运行不到这里"
} write-host $global:return2 #输出
$ccc = $global:return2 #读取
--------------------------------------------
推荐
#例子5:直写外部变量变种,用ref给函数传入【输出外部变量名】的内存地址。
function 函数_把输入的值加一($输入变量名,[ref]$输出变量名2)
{
$输出变量名2.Value = $输入变量名 + 1
} $输出变量名的内存地址 = $null #这行必须有
函数_把输入的值加一 8 ([ref]$输出变量名的内存地址)
$输出变量名的内存地址 #这里输出 9
--------------------------------------------
结论: (函数中的return有坏的特性)
凡是函数中,又调用其他函数,其他函数也有返回值;
凡是函数中有$aaa这样,把值打印到屏幕的;
凡是函数中有write-output $aaa打印屏幕的;
用了return 都会有问题。
---------------解决方案5 把不听话的【return】关进这个【class】笼子 推荐 ---------------
ps 5.0 类的关键字:
hidden 不想被别人用的隐藏属性
static 静态关键字
$this 本类的对象
powershell5.0 中的 class 类的研究:
1 类中不能 function xxx {}这样定义函数 。只能定义方法。
2 类中不能调用ps命令,不能调用ps函数。只能定义方法,并在方法中用命令,然后用return 返回数据。
3 类中可以用$a=5,但不能用$a=5;$a。
4 类中可以用$a=[aaa]::bbb(),但不能用[aaa]::bbb() 。
5 函数中可以定义类。
6 类名,类的属性名,类的方法名,都可以是中文。
7 类如果不用new新建,就不能调用其中的方法,除非方法带有 static (静态方法)前缀。类如果不用new新建,就不能使用其中的属性,除属性带有 static (静态变量)前缀。
类引发的好处:
由上述2可知,你不能在类的方法中用write-host,write-output等命令,【直接!】输出数据。
由上述3,4可知,类的方法不会【直接输出值!】,即不会返回【不想要的多余】数据。
类中没有函数中return的坏特性。
#例子6:把return关入class,编写不会返回多余数据的脚本。例子6,实际上是 例子1 的class化改写。
function aaa
{
return 'bbb'
} class ccc
{
static [string]ddd()
{
aaa
return 'ddd'
}
} [ccc]::ddd()
结论:
不想要多余的数据?用class改写你的function。
请把不听话的【return】关进【class】这个笼子的更多相关文章
- 请求量限制方法-使用本地Cache记录当前请求量[坑]
有个需求:需要限制每个账户请求服务器的次数(该次数可以配置在DB,xml文件或其他).单位:X次/分钟.若1分钟内次数<=X 则允许访问,1分钟内次数>X则不再允许访问. 这类需求很常 ...
- jQuery return false
在jQuery代码中,我们常见用return false来阻止浏览器的默认行为.例如点击链接,浏览器默认打开一个新窗口/标签,为了阻止浏览器的默认行为,我们往往这样操作: $("a.togg ...
- Javascript之return
做表单验证的时候,除了错误提示之外,还要做的一点就是避免表单提交. 如果避免表单提交呢? 有一个方法很简单,就是return 我们来看一下代码: $(".make_sure").c ...
- 请帮我看看这个页面,红色部份如何改才能保存到ACCess数据库中
<% if session("shiwei_username")="" then %> <script language="java ...
- C# return、continue、break
return 终止当前进程 可用循环判断,验证,等功能 if (ew == v) { PublicControlLib.Class.PublicProperties.ShowSuccess(); re ...
- 在jquery的ajax方法中的success中使用return要注意的问题
jquery的ajax方法:在success中使用return:来结束程序的时候,结束的只是success这个方法,也就是说success中的return的作用范围只是success: 如果要想在su ...
- Java中有多少种设计模式?请简单画一下三种常见设计模式的类图?
转载:http://blog.csdn.net/longyulu/article/details/9159589 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽 ...
- python函数版ATM
最近系统的学习python函数知识点,感觉在面向对象之前,函数的功能确实强大. 最近使用函数写了ATM项目,虽然需求简单但也有很多知识点需要注意,这个项目把python基础的很多知识点都用上了. 前前 ...
- React使用antd Table生成层级多选组件
一.需求 用户对不同的应用需要有不同的权限,用户一般和角色关联在一起,新建角色的时候会选择该角色对应的应用,然后对应用分配权限.于是写了一种实现的方式.首先应用是一个二级树,一级表示的是应用分组,二级 ...
随机推荐
- 获取dll中根目录
AppDomain.CurrentDomain.BaseDirectory获取当前应用程序域的基目录 好像是万能的:form:可执行文件路径控制台:输出路径web:根目录
- 十二、Java基础---------异常处理机制
异常 异常 异常就是程序在运行时产生的异常情况. 异常的由来 问题也是现实生活中的具体事物,也可以通过java 类的形式进行描述,并封装成对象.异常就是java 对不正常情况进行描述后的对象的体现. ...
- 学习jQuery之旅
早就听说了Jquery的大名,一直没有细心的学习一下,通过阅读收集的一些资料,感觉Jquery真的很强大.决定开始自己的学习Jquery之旅.在这里不是为大家讲解Jquery(深知水平有限),只是将自 ...
- mysql数据库的一些用法
mysql数据库语句 1.replace into REPLACE INTO (列名1,列名2,列名3) VALUES ('值1','值2','值3'); # 如果数据库中不存在 ...
- SnowNLP:一个处理中文文本的 Python 类库
https://segmentfault.com/a/1190000000362372
- UVA10561 Treblecross 组合游戏/SG定理
Treblecross is a two player gamewhere the goal is to get three X in a row on a one-dimensional board ...
- MAC地址泛洪攻击测试
测试环境:kali系统(2个kali分别作攻击人和目标用户) win7系统(主机) 1.步配置FTP设置用户名密码 2.在攻击kali端测试网络的连通性 3.测试tpf是否正常 开始泛洪 4.开始抓包 ...
- 405 Method Not Allowed
今天在发布一个网站的时候遇到 标题上的问题,一直不明白是为何,刚开始以为是我的程序写的有问题,随即将项目发给同事来发布试试,在他的IIS上发布却没出现问题,一切正常,这可就怪了,于是想到了应该是IIS ...
- c读写文件
#include<stdio.h> void main(void) { // locate ]; scanf("%s", filename); getchar(); / ...
- 项目忽然出现 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法
0.环境: 新装win8.1系统,Tomcat配置无误. 1.错误: 项目中某一.jps页面忽然出现错误,鼠标点上去为:The superclass "javax.servlet.http. ...