所以我偶然发现了一些我想要理解的东西,因为它让我很头疼.我有以下代码:
#include <stdio.h>
#include <smmintrin.h>
typedef union {
struct { float x, y, z, w; } v;
__m128 m;
} vec;
vec __attribute__((noinline)) square(vec a)
{
vec x = { .m = _mm_mul_ps(a.m, a.m) };
return x;
}
int main(int argc, char *argv[])
{
float f = 4.9;
vec a = (vec){f, f, f, f};
vec res = square(a); // ?
printf("%f %f %f %f\n", res.v.x, res.v.y, res.v.z, res.v.w);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的脑海里,在调用square中main应该把价值a中xmm0 …
我说有一个实体列表[Entity].每个Entity都有不同的功能,例如一些可以绘制到屏幕,而其他可以发出声音.可以打印所有这些信息以获取调试信息.
鉴于此,我们可能有三个类型类:Show,Draw&Sound.一个实体可以是Show和Draw的实例,而另一个实体可以是Show和Sound.
我试图找到这样的类型Entity,给定这些约束,并且考虑到我想通过能力遍历列表,例如:找到可以显示的所有实体,或者可以播放声音的所有实体.
到目前为止,我还没能用haskell的类型系统来表达这一点,唯一的方法似乎是使用运行时检查,基本上实现了我自己的约束系统.
有任何想法吗?
编者注:此问题中的语法早于Rust 1.0,1.0更新语法会产生不同的错误,但Rust 1.0中的整体概念仍然相同.
我有一个带有name字段的struct T ,我想从name函数中返回该字符串.我不想复制整个字符串,只是指针:
struct T {
name: ~str,
}
impl Node for T {
fn name(&self) -> &str { self.name }
// this doesn't work either (lifetime error)
// fn name(&self) -> &str { let s: &str = self.name; s }
}
trait Node {
fn name(&self) -> &str;
}
Run Code Online (Sandbox Code Playgroud)
为什么这是错的?&str从函数返回的最佳方法是什么?