请把不听话的【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】这个笼子的更多相关文章

  1. 请求量限制方法-使用本地Cache记录当前请求量[坑]

    有个需求:需要限制每个账户请求服务器的次数(该次数可以配置在DB,xml文件或其他).单位:X次/分钟.若1分钟内次数<=X 则允许访问,1分钟内次数>X则不再允许访问.   这类需求很常 ...

  2. jQuery return false

    在jQuery代码中,我们常见用return false来阻止浏览器的默认行为.例如点击链接,浏览器默认打开一个新窗口/标签,为了阻止浏览器的默认行为,我们往往这样操作: $("a.togg ...

  3. Javascript之return

    做表单验证的时候,除了错误提示之外,还要做的一点就是避免表单提交. 如果避免表单提交呢? 有一个方法很简单,就是return 我们来看一下代码: $(".make_sure").c ...

  4. 请帮我看看这个页面,红色部份如何改才能保存到ACCess数据库中

    <% if session("shiwei_username")="" then %> <script language="java ...

  5. C# return、continue、break

    return 终止当前进程 可用循环判断,验证,等功能 if (ew == v) { PublicControlLib.Class.PublicProperties.ShowSuccess(); re ...

  6. 在jquery的ajax方法中的success中使用return要注意的问题

    jquery的ajax方法:在success中使用return:来结束程序的时候,结束的只是success这个方法,也就是说success中的return的作用范围只是success: 如果要想在su ...

  7. Java中有多少种设计模式?请简单画一下三种常见设计模式的类图?

    转载:http://blog.csdn.net/longyulu/article/details/9159589 一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽 ...

  8. python函数版ATM

    最近系统的学习python函数知识点,感觉在面向对象之前,函数的功能确实强大. 最近使用函数写了ATM项目,虽然需求简单但也有很多知识点需要注意,这个项目把python基础的很多知识点都用上了. 前前 ...

  9. React使用antd Table生成层级多选组件

    一.需求 用户对不同的应用需要有不同的权限,用户一般和角色关联在一起,新建角色的时候会选择该角色对应的应用,然后对应用分配权限.于是写了一种实现的方式.首先应用是一个二级树,一级表示的是应用分组,二级 ...

随机推荐

  1. string类find函数返回值判定

     string类find函数返回值判定 代码示例 #include<iostream> #include<cstring> using namespace std; int m ...

  2. SQL SERVER数据库的表中修改字段属性被阻止“Prevent saving changes that require table re-creation”

    1.启动SQL SERVER,选择工具—>选项,去掉“ 阻止保存要求重新创建表的更改”前面的勾. 2.选择设计器 3.去掉“阻止保存要求重新创建表的更改”前面的对号,点击OK. 重新启动SQL ...

  3. Tsung安装与使用

    Tsung安装与使用 Tsung安装与使用的详细说明,包括测试场景的脚本配置说明 Ray 2013/11/11   目录 安装tsung Tsung运行环境安装... Tsung安装... 使用Tsu ...

  4. zoj 3673 1729

    1729 Time Limit: 3 Seconds      Memory Limit: 65536 KB 1729 is the natural number following 1728 and ...

  5. CSS 定位

    一.CSS 定位和浮动   它们代替了多年来的表格布局.   定位的思想很简单,相对于正常位置.相对于父元素.另一个元素甚至是浏览器窗口的位置.   浮动在 CSS1 中被首次提出.浮动不完全是定位, ...

  6. [问题2014A08] 解答

    [问题2014A08] 解答 由假设知 \(f(A)=\mathrm{tr}(AA')\), 因此 \[f(PAP^{-1})=\mathrm{tr}(PAP^{-1}(P')^{-1}A'P')=\ ...

  7. Quick-Cocos2d-x初学者游戏教程1

    Quick-Coco2d-x安装: Quick 安装完成后,在它的根目录下可以找到有两个名为setup_mac.sh.setup_win.bat的批处理脚本,它们分别是搭建Mac和Windows开发环 ...

  8. mac pycharm配置 python

    一.首先查看自己安装的python的路径 在terminal运行 which python(which命令只是根据PATH环境变量找) 例如:/usr/bin/python 二.设置python版本 ...

  9. PHP 小方法之 随机生成几位字符串

    if(! function_exists ('get_rand_string') ) { function get_rand_string($len=6,$format='ALL') { switch ...

  10. c++ 在windows下建立目录

    #include <direct.h> #include <stdlib.h> #include <stdio.h> int main( void ) { ) { ...