teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

別回答

2020/04/01 04:25

投稿

namuyan
namuyan

スコア76

answer CHANGED
@@ -3,12 +3,12 @@
3
3
 
4
4
  ```rust
5
5
  #[pyclass]
6
- stract Inner {
6
+ struct Inner {
7
7
  a: u32
8
8
  }
9
9
 
10
10
  #[pyclass]
11
- stract Outer {
11
+ struct Outer {
12
12
  inner: Py<Inner>
13
13
  }
14
14
 
@@ -25,11 +25,21 @@
25
25
  self.inner.to_object(py)
26
26
  }
27
27
 
28
+ //fn get(&self, py: Python) -> u32 {
29
+ // let obj = self.inner.to_object(py);
30
+ // let rc: PyRef<Inner> = obj.extract(py).unwrap();
31
+ // rc.a
32
+ //}
33
+
28
34
  fn get(&self, py: Python) -> u32 {
29
- let obj = self.header.to_object(py);
35
+ let cell: &PyCell<Inner> = self.inner.as_ref(py);
30
- let rc: PyRef<Inner> = obj.extract(py).unwrap();
36
+ let rc: PyRef<Inner> = cell.borrow();
31
37
  rc.a
32
38
  }
33
39
  }
34
40
  ```
35
- `&PyCell<Inner>`➡`Py<Inner>`➡`PyObject`➡`PyRef<Inner>`or`PyRefMut<Inner>`で操作?何かもっと良い方法があれば回答の方をよろしくお願いします。
41
+ `&PyCell<Inner>`➡`Py<Inner>`➡`PyObject`➡`PyRef<Inner>`or`PyRefMut<Inner>`で操作?何かもっと良い方法があれば回答の方をよろしくお願いします。
42
+
43
+ 追記 4/1
44
+ ---
45
+ メンテナーによる別回答を元に想定された使い方の具体例を載せました。