我已经阅读了生命周期并了解每个变量绑定都有生命周期。然而,我似乎想不出什么时候你实际上需要使用它们,因为编译器在必要时在推断它们方面做了很多工作。
《Rust》这本书,我读过。我想要一个简单易懂的例子,即使对于像我这样的人来说也是如此!
使用GPRBuild,我创建了一个名为的库项目Lib
.所有包都Lib
驻留在包中Base
,我将其用作基本包:具有基本包Base
.例如,如果我要Apple
在我创建的任何库或应用程序中创建包,它将被写为package Base.Apple
.
这个问题,使用GPRBuild.为了把东西放在Base
包装下面,它需要存在.Lib
因此,在GPRBuild库项目中,我有一个base.ads
表示包存在的文件Base
.然后在我正在使用该库的项目中Lib
,让我们将其称为Proj
,我也将所有包放在Base
包(包内Proj
)中.为了做到这一点,我们需要使用包定义来创建一个base.ads
文件.Proj
Base
我们来看看gpr
项目文件:
with "lib.gpr";
project Proj is
-- ...
end Proj;
Run Code Online (Sandbox Code Playgroud)
通过这个出现了问题; 我们突然有两个文件,都叫做base.ads
,都定义了Base
包,每个项目一个:库项目Lib
,以及Proj
使用库的项目Lib
.由于我们有两个包(和它们的文件)命名相同的东西,我们得到这个错误,这在编译时完全不奇怪:
unit "base" cannot belong to several projects
问题是:有没有办法在多个项目中拥有相同的基础包?然后通过import(with
)链接在一起的项目.如果它应该被证明是可能的,它怎么能实现呢?
我正在阅读关于String
s 的书籍部分,并发现他们正在&*
结合使用来转换一段文字.它的内容如下:
use std::net::TcpStream;
TcpStream::connect("192.168.0.1:3000"); // Parameter is of type &str.
let addr_string = "192.168.0.1:3000".to_string();
TcpStream::connect(&*addr_string); // Convert `addr_string` to &str.
Run Code Online (Sandbox Code Playgroud)
换句话说,他们说他们正在将a转换String
成a &str
.但为什么使用上述两种标志进行转换呢?如果不使用其他方法吗?&
我们是不是意味着它的参考,然后使用它*
来取消引用它?
每当我按下AltGr 键时,我MenuItem
里面的第一个MenuBar
就会收到焦点。这绝不是一种想要的行为——尽管它看起来好像是它本身提供的默认行为。MenuBar
这有点烦人,因为我使用的是瑞典语键盘——这意味着使用该键会调用[]
和。{}
AltGr
我想,而首先删除功能MenuItem
内MenuBar
顺利通过按下激活AltGr键盘上。
像往常一样,我一直在浏览Stackoverflow,希望能找到答案——但徒劳无功。老实说,由于大多数Stackoverflow实际上并没有使用瑞典语键盘布局,因此之前没有人遇到过这个问题,这并不奇怪。
也许有人在某处看到过这样的帖子——在这种情况下,把它标记为重复——在任何其他情况下,要么指出我和任何可能在正确方向上遇到这个问题的人,要么简单地回答这个问题有点肤浅的例子。
我正在创建一个应用程序,在其中手动布置纹理图集。重点是图像本身\xe2\x80\x99不应该是透明的\xe2\x80\x94它具有一致的背景颜色,然后应该在代码中将其删除。
\n我\xe2\x80\x99m 遇到的问题是我可以\xe2\x80\x99t 似乎能够从I\xe2\x80\x99m 工作中删除像素\xe2\x80\x94使它们透明\xe2\x80\ Pixmap
x94在。I\xe2\x80\x99ve 确保用于RGBA_8888
我的Pixmap
\xe2\x80\x99s Format
,它肯定支持透明度。
Here\xe2\x80\x99s 是我遇到问题的代码片段:
\npixmap.drawPixel(x, y, 0x00000000);\n
Run Code Online (Sandbox Code Playgroud)\n很明显,0x00000000
即使从十六进制转换为基数十\xe2\x80\x94,也将为零\xe2\x80\x94,说实话,它\xe2\x80\x99是相同的数字!
根据我的观察,我\xe2\x80\x99注意到该drawPixel
方法在当前像素上绘制一个像素。我想要的是让它变得透明。使用上述代码段,它将透明度绘制到不透明的\xe2\x80\x99t透明\xe2\x80\x94的东西上,最终什么也没改变。就好像你什么都不添加到某物上,某物仍然存在。
像往常一样,我自己做了一些研究。在Stackoverflow上我还没有\xe2\x80\x99t 找到任何有用的东西。我唯一知道的是上面提到的事情,我\xe2\x80\x99ve通过观察Pixmap
及其drawPixel
方法设法找到了答案。
也许有人可以指出正确的方向,告诉我如何制作透明像素Pixmap
?
我试图for
从位于impl
struct 的函数中返回位于循环内的函数指针。
fn locate_func(&self, string: &str) -> fn() -> bool {
let mut func;
for alt in &self.alts {
return alt.func;
}
}
Run Code Online (Sandbox Code Playgroud)
将来if
在for
循环中会有一条语句,但是当我正在测试时,它看起来很普通,有些不合逻辑。
我认为上面的代码应该返回的指针alt.func()
,该指针显然是一个指针,因为它告诉我,应该删除该行的return和分号。
fn locate_func(&self, string: &str) -> fn() -> bool {
let mut func;
for alt in &self.alts {
return alt.func;
}
}
Run Code Online (Sandbox Code Playgroud)
以上是运行时引起的错误locate_func()
。由于上述代码无法正常工作,我显然缺少一些东西。有什么提示吗?
是否有组织Rust项目的标准时尚?我已经使用C系列编程语言超过九年了,但Rust在某些方面似乎有所不同.
是否应该以类似于C语言的方式组织他们的项目,尤其是面向对象的语言?
project
|->src
|->main.rs
|->structs.rs
Run Code Online (Sandbox Code Playgroud)
或者也许就是这样?
project
|->src
|->main.rs
|->struct0.rs
|->struct1.rs
|->struct2.rs
|->struct3.rs
Run Code Online (Sandbox Code Playgroud)
也就是说,每个结构一个文件?
或者每次创建新的二进制项目时,是否会创建新的二进制项目?我目前正在使用Cargo来生成我的项目,但公平地说不太了解它.最后,当我阅读完整的Cargo文档时,会有一点,尽管我希望在此之前更多地了解Rust.
请在树和文本中解释,以及可能的一些代码.
Rust 中的所有泛型类型都实现了Copy
trait 吗?为了扩展这一点,除了泛型类型之外,标准库中是否有很多类型实现了这个特性?
在Java中,人们会使用它instanceof
来检查对象是否与另一个对象属于同一类型(或类范围类型).例如,如果我们有类Peach
和一个对象peach
,它将通过以下内容:
if (peach instanceof Peach)
System.out.println("peach is of type Peach!");
Run Code Online (Sandbox Code Playgroud)
...将上述语句执行到终端.
从我记忆中来看,在Ada中,有一些东西是这样的is in
,因为某些对象在某个类的范围内.但是,出于这个问题的目的,我似乎无法找到有关该主题的信息.上次我使用它is in
,我无法让它工作.因此,我决定在这里提出问题.
关于如何以类似于Java的方式完成标记类型的比较的任何指针instanceof
都将非常有用!