请把不听话的【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:直写外部变量变种,给函数传入【输出外部变量】
function 函数a($输入变量值,$输出变量名_一个不带s的字符串)
{
    $输出变量值 = $输入变量值 + 1
    # 这里或许有 if
    Set-Variable -Name  $输出变量名_一个不带s的字符串     -Value  $输出变量值
    return
    #这里或许有 endif

    write-host   "如果没有if,将运行到这里"

}

函数a   8 "script:aaa"

$script:aaa     #--------------------返回  9,即 8 + 1

--------------------------------------------
结论: (函数中的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。

时间: 2024-10-11 21:38:24

请把不听话的【return】关进【class】这个笼子的相关文章

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

有个需求:需要限制每个账户请求服务器的次数(该次数可以配置在DB,xml文件或其他).单位:X次/分钟.若1分钟内次数<=X 则允许访问,1分钟内次数>X则不再允许访问.   这类需求很常见的,像请求Baidu Map Api服务接口等,都有这类限制,只是单位不同. 一般来说,接口的请求在服务器端都会有记录的,比如记在DB中,记录 账户.请求时间.请求信息.请求操作.服务器响应信息 等.所以逻辑上完全可以获取请求当前时间段的请求量(执行记录 的count()操作,在DB中为Sql : SELE

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

jquery的ajax方法:在success中使用return:来结束程序的时候,结束的只是success这个方法,也就是说success中的return的作用范围只是success: 如果要想在success中使用return结束整个js函数,最好在最外面的方法体内定义一个全局的变量,var isOver = true;在success中如果满足条件就将isOver置为false 在ajax方法体外通过全局变量isOver的值来决定js函数是否return, 同时也要注意:ajax方法的asy

Jquery基础总结

jquery获取元素索引值index()方法: jquery的index()方法 搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置. 如果参数是一组DOM元素或者jQuery对象,那么返回值就是传递的元素相对于原先集合的位置. 如果参数是一个选择器,那么返回值就是原先元素相对于选择器匹配元素中的位置.如果找不到匹配的元素,则返回-1. <ul> <li id=&quo

使用javascript及正则表达式实现表单验证(CSS,js练习)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

什么叫面向对象

1.基本概念:1.1 类与对象的初探  要我说,无论是面向过程的语言也好,面向对象的语言也罢,我首先要给他讲的都是类和对象!--------“这个世界是由什么组成的?”这个问题如果 让不同的人来回答会得到不同的答案.如果是一个化学家,他也许会告诉你“还用问嘛?这个世界是由分子.原子.离子等等的化学物质组成的”.如果是一个画家 呢?他也许会告诉你,“这个世界是由不同的颜色所组成的”.……呵呵,众说纷纭吧!但如果让一个分类学家来考虑问题就有趣的多了,他会告诉你“这个世界是 由不同类型的物与事所构成的

ssm框架搭建+easyui增删改查实现

闲来无事,看了看别人的博客文档也跟着敲了敲,特地记录下来,方便以后学习: spring版本:4.0.6 mybatis版本:3.2.5 所有jar包打包下载:http://pan.baidu.com/s/1qLEaU 1.项目目录结构 其中,controller包下存放控制层文件,dao下存放各个model类相关的数据库操作接口,entity下放置各种model类,mappers下放置各个dao对应的映射文件,service服务层就不说了,放置各种service接口,impl是其具体实现类. 2

自己动手写web框架----2

在上一节,我们自己写的web框架,只能运行显示一个HelloWorld.现在我们对其进行一次加工,让他至少能运行一个登陆程序. 首先看login.jsp <%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %> <%@ page import=" java.u

代码生成器源码

xmal文件 <Window x:Class="MyCode.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="代码生成器" Height="650" Width="

一个简单且完善的表单验证(毕老师的)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title&