我一直在这里寻找很多问题,我发现一个类似标题的枚举案例开关没有在类型中找到,但对我来说没有解决方案.
我想使用带有自身变异的枚举来解决问题,在个别状态下,下一个交通灯颜色是什么.
enum TrafficLights {
mutating func next() {
switch self {
case .red:
self = .green
case .orange:
self = .red
case .green:
self = .orange
case .none:
self = .orange
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已将所有案例作为可能的选项,它仍然返回错误:
在'TrafficLights'类型中找不到枚举"案例"
我的代码中经常有语句执行以下操作:
long_descriptive_variable_name = some_function(long_descriptive_variable_name)
Run Code Online (Sandbox Code Playgroud)
这是非常清楚的,但同时又冗长且多余.有没有办法在Python中简化这个语句,或许可以将 some_functionact作为"变异"("就地")函数?
例如,在Julia 中,通常可以执行以下操作:
some_function!(long_descriptive_variable_name)
Run Code Online (Sandbox Code Playgroud)
并将其分派到some_function直接写入的版本long_descriptive_variable_name,有效地更新变量.
有没有办法在Python中为通用函数简洁地表达相同的内容some_function?
用一般对象方法做同样的事情呢?即简化
long_variable_name = long_variable_name.method(arg1, arg2)
Run Code Online (Sandbox Code Playgroud)
如果以上(当前版本的Python)不能(轻松)做到这一点,那么在不久的将来是否有任何PEP考虑这种变化?
根据Swift文档,mutation和inout关键字均用于从函数内部修改值类型。“变异”和“输入”之间是否有任何区别,以及在任何需要使用它们之一的特殊情况下,有什么区别。
我正在尝试扩展,NSDate但我得到两个错误:
extension NSDate { //'mutating' isn't valid on methods in classes or class-bound protocols
mutating func addMonth() {
let calendar = NSCalendar.currentCalendar()
let component = NSDateComponents()
component.month = 1
self = calendar.dateByAddingComponents(component, toDate: self, options: []) //Cannot assign to value: 'self' is immutable
}
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是,这NSDate是一个类而不是Swift类型,因为mutating类中的方法不能使用错误状态.如果我返回值并分配它一切正常但我想知道这不起作用的确切原因以及是否有更好的解决方法.
即使mutating func在方法中使用关键字,我也无法修改模型类变量?
所以基本上我都包裹着我的问题,在一个非常简单的方法,我有一个类Car,拥有3个变量id,start和modelNo
之后,初始化一个空的Car模型数组,然后显示10个汽车,为迭代创建一个范围范围1...10,初始化Car模型类,并将其附加到原始的cars数组中。
前5个汽车ID为0,最后5个汽车ID为1的支票
我想要一个将在其中启动相同ID的最后一辆车的过滤器,因此我创建了一个过滤并修改start变量但无法修改的方法。您能帮我做错什么吗?
请查看我的完整代码,然后将其复制粘贴到操场上。
struct Car {
var id = 0
var start = false
var modelNo: String
init(start: Bool, id: Int, model: String) {
self.start = start
self.id = id
self.modelNo = model
}
mutating func startCar(status: Bool) {
start = status
}
}
var arrCars:[Car] = [Car]()
for i in 1...10 {
let md = Car(start: false, id: i <= 5 ? 0 : …Run Code Online (Sandbox Code Playgroud)