我引用官方文档:
引用代表某种拥有价值的借用。
来自 C、Java、Perl 和 PHP,我将“引用”视为值的地址(或指针)。可以声明“T”类型的变量或对“T”类型变量的引用(或指针)(在 Perl 中使用&- 或\)。
然而,我不确定这种表示对于 Rust 来说是否完全有效。有件事让我烦恼。
我总是看到“字符串切片”被作为参考进行操作,即以其借用的形式(&str)。
我(到目前为止)从未见过“ str”类型的变量。
我试图声明一个类型为“ str”的变量...但是编译器不允许我这样做。
问题:我们可以定义一个“ str”类型的变量吗?
如果不可能,则意味着我们面临着一种只能声明为引用的数据类型。这看起来很奇怪...
在这个Rust 文档中,写道:
字符串是在堆上分配的。
但是,当我查看内存映射时,我发现它是在堆栈中分配的......
让我们考虑下面的基本 Rust 源文件:
// rustc -o string_vs_str -C opt-level=0 -C debuginfo=2 main.rs
fn main() {
let my_string: String = String::from("abc");
let my_str: &str = "def";
println!("{}{}", my_string, my_str);
let my_string_str: &str = my_string.as_str();
println!("my_string_str: {}", my_string_str);
}
Run Code Online (Sandbox Code Playgroud)
让我们根据以下命令在可执行文件上执行 RUST-GDB:
# rust-gdb --batch --command=test.gdb --args ./string_vs_str
set width 0
set height 0
set verbose off
### Set 2 breakpoints
b main.rs:6
b main.rs:8
### Start the process
r
### Display the memory mapping into the …Run Code Online (Sandbox Code Playgroud) 我已经实现了流转换器。请注意,这只是一个练习(为了学习 Dart)。该转换器将整数转换为字符串。我给出了下面的代码,你也可以在GitHub上找到它。
// Conceptually, a transformer is simply a function from Stream to Stream that
// is encapsulated into a class.
//
// A transformer is made of:
// - A stream controller. The controller provides the "output" stream that will
// receive the transformed values.
// - A "bind()" method. This method is called by the "input" stream "transform"
// method (inputStream.transform(<the stream transformer>).
import 'dart:async';
/// This class defines the implementation of a class that emulates …Run Code Online (Sandbox Code Playgroud) 我是 Rust 新手,我试图弄清楚东西分配在哪里。
1.64.0我在 Ubuntu 上使用 Rust 22.04.0( jammy):
$ rustc --version
rustc 1.64.0 (a55dd71d5 2022-09-19)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
Run Code Online (Sandbox Code Playgroud)
我尝试通过编译这个非常基本的 Rust 程序来探索可执行文件:
fn tester() {
let borrowed_string: &str = "world";
println!("{}", borrowed_string);
}
fn main() { tester(); }
Run Code Online (Sandbox Code Playgroud)
编译(好吧,这有点矫枉过正了......但我想确保我拥有使用 GDB 所需的一切):
$ cargo build --config "profile.dev.debug=true" --config "profile.dev.opt-level=0" --profile=dev
Compiling variables v0.1.0 (/home/denis/Documents/github/rust-playground/variables)
Finished dev [unoptimized + debuginfo] target(s) in 0.71s …Run Code Online (Sandbox Code Playgroud) 我正在使用带有 Dart 插件的 WenStorm 2018.2.5(已注册)。
在编辑一个简单的代码时,编辑器向我显示了一条消息:
取消 dart.async.StreamSubscription 的实例
我不明白这个消息是什么意思。我看不出代码有什么问题。而且,如果我运行代码检查,结果是:“ No suspicious code found”。
任何的想法 ?
笔记 :
const int eventsCount = 5;
const int waitBetweenTwoEvents = 1;
typedef Streamer = Stream<int> Function();
...
Streamer streamCreator = () async* {
for(int i=0; i<eventsCount; i++) {
yield i;
sleep(Duration(seconds: waitBetweenTwoEvents));
}
};
Run Code Online (Sandbox Code Playgroud)