我对错误感到有点困惑
Sub SPO_EditDocument_BUttonClick()
'Declare constant variable
Dim CellValue As String
Dim DelRng As Range
'Edit SPO Documents.
'Consider worksheet"SPO"
Application.ScreenUpdating = False
With Worksheets("Sheet1")
'1. Loop and delete unnecessary columns
LastCol = .Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
For i = 1 To LastCol
CellValue = .Cells(1, i) 'Get Column header
Select Case CellValue
Case "Firstname", "Surname", "DoB", "Gender", "Year"
If Not DelRng Is Nothing Then
Set DelRng = Application.Union(DelRng, .Columns(i))
Else
Set DelRng = .Columns(i)
End If
Case Else
' Do nothing
End Select
Next i
End With 'End to process Worksheets
' if there's at least 1 column in DelRng >> delete the entire range (all columns) in 1-shot
If Not DelRng Is nothign Then DelRng.Delete
Application.ScreenUpdating = True
End Sub
我可以通过包含我在[error] found : A => B
[error] required: PartialFunction[A,B]
中使用的函数来解决这个问题,但这看起来像是我期望隐含的the doc's definition"它的部分功能类型PartialFunction [A,B]是一元函数,其中域必然包括类型A和#34的所有值。
使用"必然"这个定义似乎明确地包含一个函数Function.unlift(x => Some(...))
是A => B
。我误读了这个,还是错过了其他的东西?
为了增加我的困惑,我在使用PartialFunction[A, B]
和Throwable
的代码中收到此错误时,我无法使用a simpler example重现该错误。
答案 0 :(得分:1)
PartialFunction does not necessarily include all values of type A
这意味着您只能在没有其他值的情况下处理目标值。比如模式匹配。
示例1:
List(1, 2, 3, 4, 5).collect({
case x if x % 2 == 0 => x + 1
})
在上面的代码段中,我们只想处理偶数数字和加号 1.如果没有PartialFunction
,我们需要{ {1}}首先是偶数,再次filter
。
示例2:
map
在示例2中,我们只想处理列表中的字符串类型值,因此List(1, 2, "one", "two").collect({
case x: String => x + 1
})
也可用于匹配类型。< / p>
因此,如果您希望PartialFunction
将implicit
转换为Function
,我认为您可以定义隐式方法,如:
PartialFunction
但似乎 implicit def convertFunctionToPartialFunction[A, B](f: A => Option[B]) = {
Function.unlift(f)
}
val a: Int => Option[Int] = (x: Int) => {
if (x % 2 == 0) {
Some(x + 1)
} else None
}
val res = List(1, 2, 3, 4, 5).collect(a)
a
很难看......
答案 1 :(得分:1)
PartialFunction[A, B]
是A => B
的子类型。特别是,它具有isDefinedAt
没有的A => B
方法。因此,在期望PartialFunction
的情况下,不能使用正常函数。
你的&#34;更简单的例子&#34;相反的是:它将PartialFunction
传递给需要函数的东西。这个方向很好。
您可以使用
而不是弄乱Function.unlift
{ case x => f(x) }
(因为PartialFunction
是您案例中的预期类型)。还有PartialFunction(f)
, but it's deprecated since 2.12.5。