我正在为处理Sub DeleteRowBasedOnCriteria()
Dim RowToTest As Long
For RowToTest = Cells(Rows.Count, 14).End(xlUp).Row To 2 Step -1
With Cells(RowToTest, 14)
If .Value <> "Completed" _
Then _
Rows(RowToTest).EntireRow.Delete
End With
Next RowToTest
End Sub
类型而努力处理我正在编写的内容,答案可能涉及泛型,但我有点坚持正确的解决方案应该是什么。
我有一个Scala类Class
,它有几个子类(Vehicle
,Car
,Bus
,Train
等):
Motorcycle
我现在正在尝试编写一个实用程序方法,可以将String映射到class Vehicle {
...
}
class Car extends Vehicle {
...
}
class Motorcycle extends Vehicle {
...
}
子类(即Vehicle
,不一个实例类):
Class
问题是我混淆/模糊类型与实例。我不希望object VehicleUtils {
def mapToVehicleType(vehicleType : String) : Vehicle = {
var vType : Vehicle = null
if(vehicleType == "car") {
vType = Car
} else if(vehicleType == "motorcycle") {
vtype = Motorcycle
} else if(...) {
...etc.
}
vType
}
}
方法返回{em>实例,例如mapToVehicleType
。如果提供“Car
”作为输入,我希望它只返回Car
类等。任何人都可以找到我出错的地方以及解决方案是什么。如果可能,我还想使用Scala car
,因为Options
方法肯定可以返回mapToVehicleType
。
答案 0 :(得分:3)
Scala提供classOf[T]
来获取类的类类型。例如:classOf[Car]
返回类型为Class[Car]
的实例。
为了映射到适当的类类型,您可以使用模式匹配将提供的字符串中的类型映射到Option
:
def mapToVehicleType(vehicleType: String): Option[Class[_ <: Vehicle]] = {
vehicleType match {
case "car" => Some(classOf[Car])
case "motorcycle" => Some(classOf[Motorcycle])
case _ => None
}
}
答案 1 :(得分:1)
你为什么要上课?这确实是关键问题。如果您要使用反射动态实例化,您可能会考虑使用不同的模式。
反射是经常用来克服Java限制的事情之一(我假设你来自Java)。但是Scala中通常有更好的模式。
你可以返回课程(例如classOf [Car])但考虑更好的算法。
让我们说,为了争论,你将这个班级作为一个&#34;工厂&#34;返回。我不确定这是最好的模式,但你可能会考虑这样的事情而不是反思:
object GetVehicleCreator {
def apply(vehicleType: String): Option[() => Vehicle] = vehicleType match {
case "car" =>
Some(() => new Car)
case "motorcycle" =>
Some(() => new Motorcycle)
case _ =>
None
}
}
请注意,它不是&#34; utils&#34;宾语。使用&#34; utils&#34;在Scala IMO中是一种反模式(老实说,我也不喜欢Java中的这种模式)。只需创建一个功能。任何带有apply方法的东西都是函数。使用:
val vehicleOption: Option[Vehicle] = for {
fn <- GetVehicleFactory("car")
vehicle <- fn()
} yield vehicle
...但我又要知道你想要完成什么。我打赌它有一个更好的模式。