第14章 函数式编程基石——高阶函数和Lambda表达式

函数式编程思想虽然与面向对象一样立即悠久,但是支持函数式编程的计算机语言不过是近几年的事情。这些语言有Swift、Python、Java 8和C++11等,作为新生的语言Kotlin也支持函数式编程。本章将介绍Kotlin语言中函数式编程最重要的基础知识——高阶函数和Lambda表达式。

14.1 函数式编程简介

函数式编程(functional programming)与面向对象编程一样都一种编程范式,函数式编程,也称为面向函数的编程。在函数式编程中一切都是函数。
函数式编程核心概念如下:
o 函数是“一等公民”:是指函数与其他数据类型是一样的,处于平等的地位。函数可以作为其他函数的参数传入,也可以作为其他函数的返回值返回。
o 使用表达式,不用语句:函数式编程关心的输入和输出,即:参数和返回值。在程序中使用表达式可以有返回值,而语句没有。例如:控制结构中的if和when结构都属于表达式。
o 高阶函数:函数式编程支持高阶函数,所谓高阶函数就是一个函数可以作为另外一个函数的参数或返回值。
o 无副作用:是指函数执行过程会返回一个结果,不会修改外部变量,这就是“纯函数”,同样的输入参数一定会有同样的输出结果。
Kotlin语言支持函数式编程,提供了函数类型、高阶函数和Lambda表达式。

14.2 高阶函数

函数式编程的关键是高阶函数的支持。一个函数可以作为另一个函数的参数,或者返回值,那么这个函数就是“高阶函数”。本节介绍一下高阶函数。

14.2.1 函数类型
Kotlin中每一个函数都有一个类型,称为“函数类型”,函数类型作为一种数据类型与数据类型在使用场景没有区别。可以声明变量,也可以作为其他函数的参数或者其他函数的返回值使用。
现有如下3个函数的定义:
//代码文件:chapter14/src/com/a51work6/section2/ch14.2.1.kt
package com.a51work6.section2

//定义计算长方形面积函数
//函数类型(Double, Double) -> Double
fun rectangleArea(width: Double, height: Double): Double { ①

return  width * height    

}

//定义计算三角形面积函数
//函数类型(Double, Double) -> Double
fun triangleArea(bottom: Double, height: Double) = 0.5 * bottom * height ②

fun sayHello() { //函数类型()->Unit ③
print(“Hello, World”)
}

fun main(args: Array) {

val getArea: (Double, Double) ->Double = ::triangleArea ④
//调用函数
val area = getArea(50.0, 40.0)    ⑤
print(area)   //1000.0

}
上述代码中,函数rectangleArea和triangleArea具有相同的函数类型(Double, Double) -> Double。函数类型就是把函数参数列表中的参数类型保留下来,再加上箭头符号和返回类型,形式如下:
参数列表中的参数类型 -> 返回类型
每一个函数都有函数类型,即便是函数列表中没有参数,以及没有返回值的函数也有函数类型,如代码第③行的sayHello()函数,sayHello()函数的函数类型是()->Unit。

14.2.2 函数字面量
函数类型可以声明的变量,那么函数类型变量能够接收什么的数据呢?即函数字面量如何表示的问题,函数字面量可以有三种表示:
函数引用。引用到一个已经定义好的,有名字的函数。它可以作为函数字面量。
匿名函数。没有名字的函数,即匿名函数,它也可以作为函数字面量。
Lambda表达式。Lambda表达式是一种匿名函数,可以作为函数字面量。
示例代码如下:
//代码文件:chapter14/src/com/a51work6/section2/ch14.2.2.kt
package com.a51work6.section2

fun calculate(opr: Char): (Int, Int) -> Int {

//加法函数
fun add(a: Int, b: Int): Int { return a + b
}//减法函数
fun sub(a: Int, b: Int): Int {return a - b
}val result: (Int, Int) -> Int =when (opr) {'+' -> ::add                  ①'-' -> ::sub                    ②'*' -> {//乘法匿名函数fun(a: Int, b: Int):Int {       ③return (a * b)}}else -> { a, b ->(a / b) } //除法Lambda表达式    ④}
return result

}

fun main(args: Array) {
val f1 = calculate(’+’) ⑤
println(f1(10, 5)) //调用f1变量 ⑥
val f2 = calculate(’-’)
println(f2(10, 5))
val f3 = calculate(’*’)
println(f3(10, 5))
val f4 = calculate(’/’)
println(f4(10, 5))
}
上述代码第①行和第②行是函数引用,采用“双冒号加函数名”形式引用,add和sub是两个局部函数,它们的函数引用表示方式是::add和::sub,它们可以作为函数字面量赋值给result变量。代码第③行声明匿名函数,匿名函数不需要函数名,它是一个表达式直接赋值给result变量。代码第④行采用的Lambda表达式,也可以赋值给result变量。
获得一个函数类型的变量之后如何使用呢?答案是可以把它当作函数一样调用。例如代码第⑤行val f1 = calculate(’+’)中f1是一个函数类型变量,事实上f1就是指向add函数的。代码第⑥行是调用f1函数类型变量,事实上就是在调用add函数。其他的变量以此类推,不再赘述。

14.2.3 函数作为另一个函数返回值使用
可以把函数作为另一个函数的返回值使用,那么这个函数属于高阶函数。14.2.2节的calculate函数的返回类型就是(Int, Int) -> Int函数类型,说明calculate是高阶函数。下面再介绍一个函数作为另一个函数返回值使用的示例:
//代码文件:chapter14/src/com/a51work6/section2/ch14.2.3.kt
package com.a51work6.section2

fun getArea(type: String): (Double, Double) -> Double { ①

var returnFunction: (Double, Double)-> Double             ②when (type) {"rect" ->   //rect 表示长方形returnFunction =::rectangleArea    ③else ->  //tria 表示三角形returnFunction =::triangleArea     ④
}return returnFunction      ⑤

}

fun main(args: Array) {

//获得计算三角形面积函数
var area: (Double, Double) ->Double = getArea("tria")            ⑥
println("底10 高13,计算三角形面积:${area(10.0,15.0)}")     ⑦//获得计算长方形面积函数
area = getArea("rect")               ⑧
println("宽10 高15,计算长方形面积:${area(10.0,15.0)}")     ⑨

}

上述代码第①行定义函数getArea,其返回类型是(Double, Double) -> Double,这说明返回值是一个函数类型。第②行代码声明returnFunction变量,显式指定它的类型是(Double, Double) -> Double函数类型。第③行代码是在类型type为rect(即长方形)的情况下,把rectangleArea函数引用赋值给returnFunction变量,这种赋值之所以能够成功是因为returnFunction类型是(Double, Double) -> Double函数类型。第④行与第③行代码一样不再解释。第⑤行代码将returnFunction变量返回。
代码第⑥行和第⑧行调用函数getArea,返回值area是函数类型变量。第⑦行和第⑨行中的area(10,15)调用函数其参数列表是(Double, Double)。
上述代码运行结果如下:
底10 高15,计算三角形面积:75.0
宽10 高15,计算长方形面积:150.0

14.2.4 函数作为参数使用
作为高阶函数还可以接收另一个函数作为参数使用。下面来看一个函数作为参数使用的示例:
//代码文件:chapter14/src/com/a51work6/section2/ch14.2.4.kt
package com.a51work6.section2

//高阶函数,funcName参数是函数类型
fun getAreaByFunc(funcName: (Double, Double) -> Double, a: Double, b:
Double): Double { ①
return funcName(a, b)
}

fun main(args: Array) {

//获得计算三角形面积函数
var result = getAreaByFunc(::triangleArea,10.0, 15.0)               ②
println("底10 高15,计算三角形面积:$result")              ③//获得计算长方形面积函数
result = getAreaByFunc(::rectangleArea, 10.0,15.0)         ④
println("宽10 高15,计算长方形面积:$result")              ⑤

}
上述代码第①行定义函数getAreaByFunc,它的第一个参数funcName是函数类型(Double, Double) -> Double,第二个和第三个参数都是Double类型。函数的返回值是Double类型,是计算几何图形面积。
代码第②行是调用函数getAreaByFunc,给它传递的第一个参数::triangleArea是函数引用,第二个参数是三角形的底边,第三个参数是三角形的高。函数的返回值result是Double,是计算所得的三角形面积。
第③行也是调用函数getAreaByFunc,给它传递的第一个参数::rectangleArea是函数引用,第二个参数是长方形的宽,第三个参数是长方形的高。函数的返回值result也是Double,是计算所得的长方形面积。

上述代码的运行结果如下:
底10 高15,三角形面积:75.0
宽10 高15,计算长方形面积:150.0
综上所述,比较本节与上一节的示例,可见它们具有相同的结果,都使用了函数类型(Double, Double)
-> Double,通过该函数类型调用triangleArea和rectangleArea函数来计算几何图形面积。上一节是把函数作为函数返回值类型使用,而本节是把函数作为另一个函数的参数使用。经过前文的介绍,你会发现函数类型也没有什么难理解的,与其他类型的用法一样。

14.3 Lambda表达式

14.2.2节已经使用到了Lambda表达式,Lambda表达式是一种匿名函数,可以作为表达式、函数参数和函数返回值使用,Lambda表达式的运算结果是一个函数。

14.3.1 Lambda表达式标准语法格式
Kotlin中的Lambda表达式很灵活,其标准语法格式如下:
{ 参数列表 ->
Lambda体
}
其中,Lambda表达式的参数列表与函数的参数列表形式类似,但是Lambda表达式参数列表前后没有小括号。箭头符号将参数列表与Lambda体分隔开,Lambda表达式不需要声明返回类型。Lambda表达式可以有返回值,如果没有return语句Lambda体的最后一个表达式就是Lambda表达式的返回值,如果有return语句返回值是return语句后面的表达式。
在这里插入图片描述
重构14.2.2节示例代码如下:
//代码文件:chapter14/src/com/a51work6/section3/ch14.3.1.kt
package com.a51work6.section3

private fun calculate(opr: Char): (Int, Int) -> Int {

return when (opr) {'+' -> { a: Int, b: Int ->a + b }     ①'-' -> { a: Int, b: Int ->a - b }       ②'*' -> { a: Int, b: Int ->a * b }       ③else -> { a: Int, b: Int ->a / b }     ④
}

}

fun main(args: Array) {
val f1 = calculate(’+’) ⑤
println(f1(10, 5)) //调用f1变量 ⑥
val f2 = calculate(’-’)
println(f2(10, 5))
val f3 = calculate(’*’)
println(f3(10, 5))
val f4 = calculate(’/’)
println(f4(10, 5))
}

calculate函数是高阶函数,它的返回值是函数类型(Int, Int) ->
Int。代码第①行~第④行分别定义了4个Lambda表达式,它们的函数类型(Int, Int) -> Int与calculate函数要求的返回类型是一致的。
代码第⑤行是调用calculate函数,返回值f1也是一个函数,这就是高阶函数。代码第⑥行是调用f1函数。
另外,calculate函数还有表示称为表达式函数体形式,代码如下:
private fun calculate(opr: Char): (Int, Int) -> Int =when (opr) {
‘+’ -> { a: Int, b: Int -> a +b }
‘-’ -> { a: Int, b: Int -> a -b }
‘*’ -> { a: Int, b: Int -> a *b }
else -> { a: Int, b: Int -> a /b }
}
比较上述代码不难发现,表达式函数体要比代码块函数体代码简洁很多。

14.3.2 使用Lambda表达式
Lambda表达式也是函数类型,可以声明变量,也可以作为其他函数的参数或者返回值使用。14.3.1节示例已经实现了Lambda表达式返回值使用,下面介绍一个Lambda表达式作为参数使用示例,示例代码如下:
//代码文件:chapter14/src/com/a51work6/section3/ch14.3.2.kt
package com.a51work6.section3

//打印计算结果函数
fun calculatePrint(n1: Int,
n2: Int,
opr: Char,
funN: (Int, Int) ->Int) {//函数类型 ①
println("$n1 $opr $n2 = ${funN(n1,n2)}")
}

fun main(args: Array) {
calculatePrint(10, 5, ‘+’, { a: Int,b: Int -> a + b }) ②
calculatePrint(10, 5, ‘-’, funN = {a: Int, b: Int -> a - b }) ③
}
代码第①行calculatePrint函数的最后一个参数是函数类型(Int, Int) -> Int。代码第②行是调用calculatePrint,第三个参数传递是的Lambda表达式。代码第③行是调用calculatePrint,第三个参数采用命名参数方式,传递是的Lambda表达式。

14.3.3 Lambda表达式简化写法
Kotlin提供了多种Lambda表达式简化写法,下面介绍其中几种。
1.参数类型推导简化
类型推导是Kotlin的强项,Kotlin编译器可以根据上下文环境推导出参数类型和返回值类型。以下代码是标准形式的Lambda表达式:
{ a: Int, b: Int -> a + b }
Kotlin能推导出参数a和b是Int类型,当然返回值也是Int类型。简化形式如下:
{ a, b -> a + b }
使用这种简化方式修改后的calculate函数代码如下:
private fun calculate(opr: Char): (Int, Int) -> Int =
when (opr) {
‘+’ -> { a, b -> a + b }
‘-’ -> { a, b -> a - b }
‘*’ -> { a, b -> a * b }
else -> { a, b -> a / b }
}
上述代码的Lambda表达式是14.3.1节示例的简化写法,其中a和b是参数。

2.使用尾随Lambda表达式
Lambda表达式可以作为函数的参数传递,如果Lambda表达式很长,就会影响程序的可读性。如果一个函数的最后一个参数是Lambda表达式,那么这个Lambda表达式可以放在函数括号之后。示例代码如下:
fun calculatePrint1(funN: (Int, Int) -> Int) { //参数是函数类型 ①
//使用funN参数
println("${funN(10, 5)}")
}

//打印计算结果函数
//ch14.3.2.kt中的calculatePrint
fun calculatePrint(n1: Int,
n2: Int,
opr: Char,
funN: (Int, Int) ->Int) {//最后一个参数是函数类型 ②
println("${n1} ${opr} n2={n2} ={funN(n1, n2)}")
}

fun main(args: Array) {

calculatePrint(10, 5, '+', { a, b-> a + b })//标准形式
calculatePrint(10, 5, '-') { a, b-> a - b }//尾随Lambda表达式形式      ③calculatePrint1({ a, b -> a + b})//标准形式
calculatePrint1() { a, b -> a + b}//尾随Lambda表达式形式                ④
calculatePrint1 { a, b -> a + b}//尾随Lambda表达式,如果只有没有参数可省略括号    ⑤

}
上述代码第①行和第②行定义了两个高阶函数,它们的最后一个参数都是函数类型。代码第③行、第④行和第⑤行都是采用尾随Lambda表达式形式调用函数。由于调用calculatePrint1函数采用了尾随Lambda表达式形式,这样一来它的小括号中就没有参数了,这种情况下可以省略小括号,见代码第⑤行。
在这里插入图片描述
3.省略参数声明
如果Lambda表达式的参数只有一个,并且能够根据上下文环境推导出它的数据类型,那么这个参数声明可以省略,在Lambda体中使用隐式参数it替代Lambda表达式的参数。示例代码如下:
fun revreseAndPrint(str: String, funN: (String) -> String)
{ ①
val result = funN(str)
println(result)
}

fun main(args: Array) {

revreseAndPrint("hello", {s -> s.reversed() })//标准形式           ②              
revreseAndPrint("hello", {it.reversed() })//省略参数,使用隐式参数it  ③val result1 = { a: Int ->println(a) }//不能省略参数声明             ④
val result2:(Int)->Unit = {println(it) }//可以省略参数声明          ⑤
result2(30)      //输出结果是30

}
上述代码第①行是定义反转并打印字符串高阶函数revreseAndPrint,它的第二个参数是函数类型(String) -> String)。代码第②行和第③行是调用revreseAndPrint函数,区别是代码第②行采用是标准的Lambda表达式,而代码第③行省略了参数s声明,使用it隐式变量替代。
在这里插入图片描述
14.3.4 Lambda表达式与return语句
Lambda表达式体中也可以使用return语句,它会使程序跳出Lambda表达式体。示例代码如下:
//代码文件:chapter14/src/com/a51work6/section3/ch14.3.4.kt
package com.a51work6.section3

//累加求和函数
fun sum(vararg num: Int): Int {

var total = 0
num.forEach {           ①//if (it ==10) return -1   //返回最近的函数                    ②if (it ==10) return@forEach//返回Lambda表达式函数       ③total += it
}
return total

}

fun main(args: Array) {

val n = sum(1,2, 10, 3)
println(n)          //6val add =label@ {     ④val a = 1val b = 2       

return@label 10 ⑤
a + b
}
//调用Lambda表达式add
println(add()) //10

}
上述代码第①行是使用了forEach函数,它后面的Lambda表达式,如果使用代码第②行if (it == 10) return -1语句,则会返回最近的函数,即sum函数,不是返回Lambda表达式forEach。为了返回Lambda表达式则需要在return语句后面加上标签,见代码第③行,@forEach是隐式声明标签,标签名是Lambda表达式所在函数名(forEach)。也可以为Lambda表达式声明显示标签,代码第④行label@是Lambda表达式显示声明标签,代码第⑤行是使用显示标签。
在这里插入图片描述

14.4闭包与捕获变量

闭包(closure)是一种特殊的函数,它可以访问函数体之外的变量,这个变量和函数一同存在,即使已经离开了它的原始作用域也不例外。这种特殊函数一般是局部函数、匿名函数或Lambda表达式。
闭包可以访问函数体之外的变量,这个过程称为捕获变量。示例代码如下:
// 全局变量
var value = 10

fun main(args: Array) {
//局部变量
var localValue = 20

val result = { a: Int ->               ①value++                           ②      localValue++                    ③val c = a + value + localValue      ④println(c)
}
result(30)      //输出结果是62   

println("localValue = " + localValue) //输出结果是localValue = 21
println("value= " + value) //输出结果是value = 11
}
本例中的闭包是捕获value和localValue变量的Lambda表达式。代码第①行是Lambda表达式,在Lambda体中捕获变量value和localValue。代码第②行是修改全局变量value,代码第③行是修改局部变量localValue。代码第④行是读取value和localValue变量。
在这里插入图片描述在这里插入图片描述
下面是一个局部函数示例:
fun makeArray(): (Int) -> Int { ①

var ary = 0       ②//局部函数捕获变量
fun add(element: Int): Int {         ③ary += element                 ④return ary                         ⑤
}return ::add     ⑥

}
fun main(args: Array) {

val f1 = makeArray()         ⑦
println("---f1---")
println(f1(10))//累加ary变量,输出结果是10
println(f1(20))//累加ary变量,输出结果是30
println(f1(30))//累加ary变量,输出结果是60

}
在上述代码中,第①行定义函数makeArray,它的返回值是(Int) -> Int函数类型。第②行声明并初始化变量ary,它的作用域是makeArray函数体。第③行代码定义了局部函数add,在add函数体内,第④行代码修改变量ary值。第⑤行代码是从add函数中返回变量ary。第⑥行代码是返回局部函数::add引用。
这样当在第⑦行调用的时,f1是局部函数add的一个变量。需要注意的是,f1每次调用时,ary变量作用域已经不存在,但是ary变量值都能够被保持。
上述示例也可以改为匿名函数实现,代码如下所示:
fun makeArray(): (Int) -> Int {

var ary = 0 //匿名函数形式捕获变量
return
fun(element: Int): Int {     ①ary +=elementreturn ary          ②
}

}
makeArray函数返回一个匿名函数,见代码第①行。代码第②行是匿名函数返回值。比较匿名函数与局部函数,会发现Lambda表达式代码比较简洁,实现的结果完全一样。
上述示例也可以改为Lambda表达式实现,代码如下所示:
fun makeArray(): (Int) -> Int {

var ary = 0 //Lambda表达式形式捕获变量
return { element ->         ①ary += elementary                          ②
}

}
makeArray函数返回一个Lambda表达式,见代码第①行。代码第②行是Lambda表达式返回值,在ary是Lambda体的最后一行,它是Lambda表达式返回值,不需要return语句。比较Lambda表达式与匿名函数和局部函数,会发现Lambda表达式代码最为简洁,最后实现的结果完全一样。

14.5 内联函数

在高阶函数中参数如果是函数类型,则可以接收Lambda表达式,而Lambda表达式在编译时被编译称为一个匿名类,每次调用函数时都会创建一个对象,如果这种被函数反复调用则创建很多对象,会带来运行时额外开销。为了解决次问题,在Kotlin中可以将这种函数声明为内联函数。
在这里插入图片描述
14.5.1 自定义内联函数
Kotlin标准库提供了很多常用的内联函数,开发人员可以自定义内联函数,但是如果函数参数不是函数类型,不能接收Lambda表达式,那么这种函数一般不声明为内联函数。声明内联函数需要使用关键字inline修饰。
示例代码如下:
//代码文件:chapter14/src/com/a51work6/section5/ch14.5.1.kt
package com.a51work6.section5

//内联函数
inline fun calculatePrint(funN: (Int, Int) -> Int) { ①
println("${funN(10, 5)}")
}

fun main(args: Array) {
calculatePrint{ a, b -> a + b } ②
calculatePrint{ a, b -> a - b } ③
}
上述代码第①行声明了一个内联函数calculatePrint,它的参数是(Int, Int) -> Int函数类型,它可以接收Lambda表达式。代码第②行和第③行分别调用了calculatePrint函数。

14.5.2 使用let函数
在Kotlin中一个函数参数被声明为非空类型时,也可以接收可空类型的参数,但是如果实际参数如果真的为空,可能会导致比较严重的问题。因此需要在参数传递之前判断可空参数是否为非空,示例代码如下:
//代码文件:chapter14/src/com/a51work6/section5/ch14.5.2.kt
package com.a51work6.section5

fun square(num: Int): Int = num * num ①

fun main(args: Array) {
val n1: Int? = 10 //null ②
//自己进行非空判断
if (n1 != null) { ③
println(square(n1)) ④
}
}
上述代码第①行是声明一个函数square,参数是非空整数类型,该函数实现一个整数的平方运算。代码第②行是声明一个可空整数类型(Int?)变量n1,代码第③行是判断n1是否为非空,如果非空才调用,见代码第④行。
自己判断一个对象非空比较麻烦。在Kotlin中任何对象都可以一个let函数,let函数后面尾随一个Lambda表达式,在对象非空时执行Lambda表达式中的代码,为空时则不执行。
示例代码如下:
n1?.let { n -> println(square(n)) }
n1?.let { println(square(it)) }
这两行代码都是使用let函数进行调用效果是一样的,当n1非空时执行Lambda表达式中的代码,如果n1为空则不执行。n1?.let { println(square(it))
}语句是省略了参数声明,使用隐式参数it替代参数n。

14.5.3 使用with和apply函数
有时候需要对一个对象设置多个属性,或调用多个函数时,可以使用with或apply函数。与let函数类似Kotlin中所有对象都可以使用这两个函数。
示例代码如下:
//代码文件:chapter14/src/com/a51work6/section5/ch14.5.3.kt
package com.a51work6.section5

import java.awt.BorderLayout
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
class MyFrame(title: String) : JFrame(title) {

init {// 创建标签val label =JLabel("Label")     // 创建Button1val button1= JButton()                        ①       

button1.text = “Button1”
button1.toolTipText = “Button1”
// 注册事件监听器,监听Button1单击事件
button1.addActionListener { label.text = “单击Button1” } ②

    // 创建Button2val button2= JButton().apply {             ③text ="Button2"           

toolTipText = “Button2”
// 注册事件监听器,监听Button2单击事件
addActionListener { label.text = “单击Button2” }
// 添加Button2到内容面板
contentPane.add(this, BorderLayout.SOUTH)
} ④

with(contentPane) { ⑤
// 添加标签到内容面板
add(label, BorderLayout.NORTH)
// 添加Button1到内容面板
add(button1, BorderLayout.CENTER)
println(height)
println(this.width)
} ⑥

    // 设置窗口大小      

setSize(350, 120)
// 设置窗口可见
isVisible =true
}
}

fun main(args: Array) {
//创建Frame对象
MyFrame(“MyFrame”)
}
上述代码是Swing的窗口,Swing是Java的用户图形界面介绍,Swing会在第22章介绍,本示例有图形界面组件的技术细节本暂不讨论。代码第①行和第③行分别创建两按钮对象,其中代码第①行第②行是创建并调用Button1的属性和函数,这传统的做法,由于多次调用同一个对象的属性或函数,可以使用with或apply函数,代码第③行第④行是创建并调用Button2的属性和函数,其中使用apply函数,apply函数后面尾随一个Lambda表达式,需要调用的属性和函数被放到Lambda表达式中,Lambda表达式中省略的对象名button2,例如text = "Button2"表达式说明调用的button2的text属性,apply函数中如果引用当前对象可以使用this关键字,例如contentPane.add(this,
BorderLayout.SOUTH)中的this,apply函数是有返回值的,它的返回值就是当前对象。
如果不需要返回值可以使用with函数,with函数与apply函数类似,代码第⑤行~第⑥行是使用with函数,with函数后面也尾随一个Lambda表达式,需要调用的属性和函数被放到Lambda表达式中,with函数中如果引用当前对象也是使用this关键字。

本章小结

本章主要介绍了高阶函数和Lambda表达式,读者需要理解函数式编程特点。熟悉高阶函数和Lambda表达式特点。掌握Lambda表达式标准语法,了解Lambda表达式的几个简写方式,以及尾随Lambda表达式,熟悉闭包等内容。了解什么是内联函数,以及自定义内联函数,熟悉使用let、with和apply等内联函数的使用场景。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. LAMMPS应用:LAMMPS模拟冲击压缩

    冲击波通常是由爆炸或宏观物体的高速碰撞产生的,如炸药爆炸,高速弹丸穿甲,陨石撞击等。冲击波作用下材料在极短时间内发生塑性形变、熔化或化学反应等本质上不可逆的变化。冲击载荷相关的空间尺度(如晶格层次形变)和时间分辨率(皮秒至飞秒量级)都非常适合于通过MD模拟进…...

    2024/4/24 12:21:52
  2. qt制作中国象棋

    qt制作象棋 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEenum ChessType {NullChess,RJu,RMa,RXiang,RShi,RJiang,RPao,RBing,BJu,BMa,BXiang,BShi,BJiang,BP…...

    2024/4/24 12:21:48
  3. 写代码需要注意的地方

    以下属于个人总结,如有更好的方法或错误欢迎评论指出。一、命名:一个好的命名让代码的可读性更强。(希望大家评论给出自己更好的命名方法,我再更新到这)1)类名需要尽可能的简约(不超过三个业务描述的单词,超过了可以缩写某个单词或直接省略);例如 用户控制类 UserCon…...

    2024/4/24 12:21:46
  4. 基于深度学习的HSI分类——解决两大问题(二)

    1.分类网络(解决高维异变) 近些年来,深度学习成为最成功的技术之一,在计算机视觉领域取得了非常好的表现。受到那些重大突破的激励,把深度学习引入了遥感领域的HSIs分类。相较于传统的基于特征的手动方法,深度学习能够从复杂的高光谱数据自动地学习分析高层级特征。基于深…...

    2024/4/24 12:21:45
  5. c++ 反射

    转至:https://cloud.tencent.com/developer/article/1524775本文不讨论完整的C++反射技术,只讨论 结构体 (struct) 的 字段 (field) 反射,及其在序列化/反序列化代码生成上的应用。正文开始于 静态反射 部分,其他部分都是铺垫,可以略读。打包后的代码可以通过 archived.z…...

    2024/4/24 12:21:44
  6. 软考高级信息系统项目管理师备考经验分享

    超详细的信息系统项目管理师备考经验分享,让你一次通过! 信息系统项目管理师作为软考高级资格考试,每年通过率20%不到,所以报考这个考试的朋友,一定要好好复习,争取一次考过。 软考考试说难也不难,简单不算不上,但用心复习一般都能有百分之八十的机率能过。 所以在这里…...

    2024/4/24 12:21:43
  7. http实现浏览器端大文件分片上传

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。第一步:前端修改由于项目使用的是BJUI前端框架,并没有使用框架本身的文件上传控件,而使用的基于jQuery的Up…...

    2024/4/24 12:21:43
  8. ZOJ 1789 The Suspects(经典并查集)

    The Suspects题目传送门~Time Limit: 2000 msMemory Limit: 65536 KBSevere acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best strategy…...

    2024/4/24 12:21:41
  9. vue $emit、$on、$refs简介

    1、$emit触发当前实例上的事件。附加参数都会传给监听器回调ex: 子组件调用父组件的方法并传递数据 注意:子组件标签中的时间也不区分大小写要用“-”隔开子组件:<template><button @click="emitEvent">点击我</button> </template> <s…...

    2024/4/24 12:21:40
  10. RocketMQ docker

    1. 安装 Namesrv docker run -d -p 9876:9876 -v F:/testing/rocketmq/logs:/root/logs -v F:/testing/rocketmq/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:4.4.0 sh mqnamesrv2. 安装 broker 服务器创建…...

    2024/4/24 12:21:39
  11. 全球顶级的五大网络组织,中国首次上榜,他们到底牛到什么程度?

    在我心里,“黑客”是一个神奇的人物,“黑客”组织更是一个超级神秘的团队。他们拥有世界上最先进的计算机技术。今天让我来冒险揭开全球顶级的五大网络组织,中国也是首次上榜,那么他们的技术他们到底牛到什么程度?笔者来揭秘一下。1、匿名者(澳大利亚)创立时间2003年,总…...

    2024/4/15 4:37:56
  12. JavaFX实验——疫情高危人群识别

    疫情期间,人员流动很容易额外添加疫情防范的难度,请根据以下信息来完成模拟扫码测温界面的代码编写。 设计一个名为Migrant的流动人员类,包括下述内容:①一个名为name的String类型私有数据域,以及对应的get/set方法; ②一个名为areaFrom的int类型私有数据域,以及对应的get…...

    2024/4/15 4:37:53
  13. 微信认证授权详细代码示例

    微信认证授权详细代码示例 背景 公司有个H5页面分享到微信之后不显示图片,且样式跟其他应用的分享卡片存在差异.后来发现是因为没有调用微信统一的分享接口.下面就是我踩坑踩出来的心得. 开发前必须知道的东西要有一个公众号,有了公众号就会有appId和appsecret. 要有一个外网可…...

    2024/4/15 4:37:51
  14. ftp上传工具下载,6款最值得推荐的Windows端ftp上传工具下载软件

    第一款:iis7服务器管理软件 它是一款免费而且专业的ftp多站点管理软件,而且可以实现ftp定时备份的功能。除此之外,它还是一款强大的服务器集成管理器,可以批量管理windows及linux服务器及vps。 下载地址:iis7服务器批量管理 效果图:第二款:FileZilla 这是一个完全免费、开…...

    2024/4/17 18:35:45
  15. dfuse for EOSIO 架构剖析:架构总览

    自从我们发布了开源和二进制程序“ dfuse for EOSIO”以来,许多人请我们来解释它其中所包含的基础架构。 Alex 会带你了解“ dfuse for EOSIO”的17个微服务以及它们各自的作用。 每一个微服务都会有专门的视频讲解,所以请关注我们,跟进我们的更新!dfuse for EOSIO 架构剖析…...

    2024/4/16 16:16:57
  16. 15、16周实验

    15.嗜睡猫问题 题目描述: 众所周知,TT家里有一只魔法喵。这只喵十分嗜睡。 一睡就没有白天黑夜。喵喵一天可以睡多次!!每次想睡多久就睡多久 喵睡觉的时段是连续的,即一旦喵喵开始睡觉了, 就不能被打扰,不然喵会咬人哒 可以假设喵喵必须要睡眠连续不少于 A 个小时,即一…...

    2024/4/15 4:37:48
  17. ftp工具,小白也轻松学会的ftp工具,服务器工具

    我认为IIS7服务器管理工具是最好用的,我一直都在自己用,功能比较强大,FTP用于在FTP服务器和FTP客户端之间上传和下载文件,它最优秀的功能就是可以批量管理,可以将文件从一个主机传输到另一个主机。 IIS7服务管理器,它最优秀的功能就是可以批量管理,适用于Windows系统,Li…...

    2024/4/15 4:37:46
  18. VS2017 MFC项目设置printf输出到Console窗口

    开发VC程序时经常通过printf打印一些调试信息,仅在VS2017测试通过,其它版本没试过一、打开VS工程。二、项目名称上点击鼠标右键选择 属性,打开项目的属性页。三、在配置属性中,生成事件->生成后事件在命令行的右边空白处添加“editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$(P…...

    2024/4/18 5:27:08
  19. 实现算法过程中的小经验——关于fflush(stdin)的使用

    关于fflush(stdin)的使用 #include <stdio.h> #include <stdlib.h>int main() {int i;for(;;) {fputs("Please input an integer: ", stdout);scanf("%d", &i);printf("%d\n", i);}return 0; } 这个程序首先会提示用户输入一个整…...

    2024/4/24 12:21:41
  20. 2.19 货币兑换-添加操作

    2.19.1 添加启动2.19.2启动结果2.19.3设置输入兑换金额页面2.19.4设置初始金额2.19.5 设置持有货币页面2.19.6 设置持有货币属性2.19.7 设置持有货币成功2.19.8 设置兑换货币2.19.9 设置兑换货币2.19.10 设置兑换货币成功2.19.11 设置兑换2.19.12 点击兑换,页面切换成功2.19.1…...

    2024/4/24 12:21:40

最新文章

  1. 环形链表题

    1.环形链表1 看题&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;哈希表 遍历所有节点&#xff0c;每次遍历一个节点时&#xff0c;判断该节点是否被访问过。 可以使用哈希表来存储所有已经访问过的节点。每次到达一个节点&#xff0c;如果该节点已…...

    2024/5/1 0:10:30
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ROS2高效学习第十章 -- ros2 高级组件之大型项目中的 launch 其二

    ros2 高级组件之大型项目中的 launch 1 前言和资料2 正文2.1 启动 turtlesim&#xff0c;生成一个 turtle &#xff0c;设置背景色2.2 使用 event handler 重写上节的样例2.3 turtle_tf_mimic_rviz_launch 样例 3 总结 1 前言和资料 早在ROS2高效学习第四章 – ros2 topic 编程…...

    2024/4/30 3:28:16
  4. 基于AI智能识别技术的智慧展览馆视频监管方案设计

    一、建设背景 随着科技的不断进步和社会安全需求的日益增长&#xff0c;展览馆作为展示文化、艺术和科技成果的重要场所&#xff0c;其安全监控系统的智能化升级已成为当务之急。为此&#xff0c;旭帆科技&#xff08;TSINGSEE青犀&#xff09;基于视频智能分析技术推出了展览…...

    2024/4/30 17:11:11
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57