我想从 Python 调用返回 Python 对象的 Rust 函数:
my_rust_module.my_function() # => <object>
Run Code Online (Sandbox Code Playgroud)
我不确定如何创建这个函数,因为类实例化的 PYO3 指南描述了如何将这样的对象实例化为 a PyRef,但是我不知道如何从 a 返回这样的引用pyfunction。
这就是我正在尝试的:
#[pyfunction]
fn my_function(py: Python) -> PyRef {
let gil = Python::acquire_gil();
let py = gil.python();
PyRef::new(py, MyStruct { }).unwrap()
}
Run Code Online (Sandbox Code Playgroud)
但是,PyRef似乎不是有效的返回类型(编译器说“类型参数的数量错误:预期为 1,发现为 0”),并且我不知道如何将 a 转换PyRef为可以返回的内容,例如 a PyObject。
在Ruby脚本中,有没有办法测试当前进程是否已经通过Bundler启动 - 即通过bundle exec或binstub?
我知道,在Rust中实现诸如global / instance / module变量之类的首选方法是在main()或其他公共入口点中创建该变量,然后将其传递给任何需要它的人。似乎也可以将a lazy_static用于不可变变量,也可以将其与a组合mutex以实现可变变量。
就我而言,我正在使用Rust创建具有绑定到Python的.so,并且我需要在Rust库中存储大量可变状态(以响应Python应用程序调用的许多不同函数)。
存储该状态的首选方式是什么?
是lazy_static因为我没有main()(或者更笼统地说,没有在Python的函数调用之间不终止的任何函数),而是仅通过可变方法进行操作,还是有另一种方法呢?
我正在 Ember 中构建我的第一个 Glimmmer 组件,我的模板中有这样的东西:
<p>Some val: {{this.my_obj.some.deeply.nested.path.to.val}}</p>
Run Code Online (Sandbox Code Playgroud)
然后我制作了一个相应的.js组件文件,并认为我会尝试从 HTML 中删除长路径。
我的第一次尝试是制作一个吸气剂:
get val() {
return this.my_obj.some.deeply.nested.path.to.val;
}
Run Code Online (Sandbox Code Playgroud)
现在使用模板:
<p>Some val: {{this.val}}</p>
Run Code Online (Sandbox Code Playgroud)
这最初有效并显示分配给val变量的起始值,但它不会在基础val更改时更新。
所以我想我会尝试将 getter 标记为已跟踪,但这使输出消失了:
@tracked val;
get val() {
return this.my_obj.some.deeply.nested.path.to.val;
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这个,但它不是有效的语法:
@tracked this.my_obj.some.deeply.nested.path.to.val;
Run Code Online (Sandbox Code Playgroud)
那么这应该如何在 Glimmer 组件中处理呢?
当然,解决方案不是让 HTML 在每次引用变量时都引用这样的深层路径,但是新的 Ember 文档虽然很好,但在这个相对简单/常见的情况下,我没有更明智的选择。