如果这很简单,请道歉。我正在学习 rust 并习惯奇怪的借用系统。通常,您只需更改方法调用的语法即可获得所需的行为,但是,在这种情况下,现在似乎有办法了。
我的代码的简化版本是这样的:EventPumpif from SDL。
struct Example {
pump: EventPump
}
impl Example {
fn method(&mut self) {
for event in pump.poll_iter() {
self.other_method();
}
}
fn other_method(&self) {
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable
--> src\game.rs:53:67
|
30 | for event in self.pump.poll_iter();
| ---------------------
| |
| mutable borrow occurs here
| mutable borrow later used here
...
53 | self.other_method();
| ^^^^ immutable borrow …Run Code Online (Sandbox Code Playgroud) 假设我有一个实现方法链的类:
from __future__ import annotations
class M:
def set_width(self, width: int)->M:
self.width = width
return self
def set_height(self, height: int)->M:
self.height = height
return self
Run Code Online (Sandbox Code Playgroud)
我可以这样使用它:
box = M().set_width(5).set_height(10)
Run Code Online (Sandbox Code Playgroud)
这有效,但如果我有一个子类 M3D:
class M3D(M):
def set_depth(self, depth: int) -> M3D:
self.depth = depth
return self
Run Code Online (Sandbox Code Playgroud)
现在我不能这样做:
cube = M3D().set_width(2).set_height(3).set_depth(5)
Run Code Online (Sandbox Code Playgroud)
我在 mypy 中收到以下错误:
_test_typeanotations.py:21: error: "M" has no attribute "set_depth"; maybe "set_width"
Run Code Online (Sandbox Code Playgroud)
因为set_width()返回一个M没有方法set_depth。我已经看到建议覆盖set_width()并set_height()为每个子类指定正确的类型,但是为每个方法编写大量代码。必须有更简单的方法。
这也与特殊方法相关,例如__enter__传统上的返回self,因此最好有一种方法来指定它,而无需在子类中提及它。
我有一个 Django 模型,以前看起来像这样:
class Car(models.Model):
manufacturer_id = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
还有另一种模型称为Manufacturer场id指。然而,我意识到使用 Django 的内置外键功能会很有用,所以我将模型更改为:
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer)
Run Code Online (Sandbox Code Playgroud)
此更改似乎立即工作正常,查询工作没有错误,但是当我尝试运行迁移时,Django 输出以下内容:
- Remove field manufacturer_id from car
- Add field manufacturer to car
Run Code Online (Sandbox Code Playgroud)
执行此迁移将清除数据库中的所有现有关系,因此我不想这样做。我真的根本不想进行任何迁移,因为查询等Car.objects.get(manufacturer__name="Toyota")工作正常。我想要一个适当的数据库外键约束,但这不是一个高优先级。
所以我的问题是:有没有一种方法可以进行迁移或其他方法,使我可以将现有字段转换为外键?我无法使用,--fake因为我需要在开发、产品和同事的计算机上可靠地工作。
这是我的代码:
l = []
p = 'abbdccc'
for i in range(len(p)-1):
m = ''
if p[i] == p[i+1]:
m +=p[i]
l.append(m)
print(l)
Run Code Online (Sandbox Code Playgroud)
b并且c重复超过1次['bb', 'ccc']如果我的字符串是'34456788'那么我的输出是['44', '88']
我正在 python 中创建一个 for 循环。我的代码:
tc = int(input())
for tc_ct in range(tc):
s = input().split()
n = len(s)
edited_s = s.copy()
for i in range(n):
i_1 = i+1
if i == 0 and s[0] == s[i_1]:
edited_s.pop(i)
elif i == n-1:
if s[i] == s[i-1]:
edited_s.pop(i)
else:
if s[i] == s[i-1] or s[i] == s[i+1]:
edited_s.pop(i)
print("".join(edited_s))
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
Execution failed.
IndexError : list index out of range
Stack Trace:
Traceback (most recent call last):
File "/tmp/146373551/user_code.py", line 8, in <module> …Run Code Online (Sandbox Code Playgroud) 下面简单的代码。
class Base{
public:
int fcn();
};
int main() {
Base b; // clause 1
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样编译?第 1 条创建了一个实例,但从未定义Base该函数。fcn()
我有一个看起来有点像这样的方法:
@app.route("/cms/<path:path>")
def show_page(path):
page = db.page.get(path=path)
if page is None:
return "Page not found", 404
return str(page)
Run Code Online (Sandbox Code Playgroud)
但是,我想显示我的应用程序默认 404 页面,而不仅仅是这个字符串。
该错误应该与真正的 404 没有区别。我不想渲染任何特定模板,而是为标准 404 渲染任何模板。
有没有办法手动渲染错误页面?我似乎找不到合适的搜索词。
python ×6
python-3.x ×2
anaconda ×1
borrowing ×1
c++ ×1
c++11 ×1
c++20 ×1
cmd ×1
django ×1
flask ×1
mutability ×1
python-3.9 ×1
rust ×1
spyder ×1
type-hinting ×1