从API 14(Android 4.0以后)开始,我可以使用ContactsContract.Profile.CONTENT_URI获取手机所有者的联系人资料Uri,并通过它获取他们的头像/联系人照片.
我想知道如何从API 8(Android 2.2)到API 13.我只需要照片(所以如果在API 14之前没有用户配置文件联系人的概念就可以了),尽管我是不能确定它实际上是可能的.
在 Rust 中,是否有类似地图的等价物可以根据我可以选择的条件停止迭代?
我想迭代一个向量,在每个元素上调用一个函数并存储结果,但如果函数返回值满足条件,则停止迭代
迭代伪代码示例:
results = []
for elem in vec:
result = foo(elem)
if result is None
break
results.push(result)
Run Code Online (Sandbox Code Playgroud)
我可以通过改变初始状态来实现与scan相当的笨拙,但是(AFAIK)它仍然会遍历每个元素:
扫描变体的类似 Rust 的伪代码:
results = vec.iter().scan(false, |fail, elem|
if *fail
return None
result = foo(elem)
if result is None
*fail = true
return result
).collect()
Run Code Online (Sandbox Code Playgroud) 谁能告诉我如何读取音频文件,将其存储在字节数组中并继续显示其波形?我对Java的了解非常基础.如果有人可以将我链接到Java音频编程的学习材料,那就太棒了.
我一直在使用Cocos2D 1.0和Box2D进行iOS项目,但是遇到了一些问题。
我需要做的就是确定玩家击中的表面的方向。例如,如果我们有一个矩形平台,并且玩家与之碰撞,我需要知道玩家是否已击中它的左,右,上或下表面。游戏中的所有物体都是正方形的,只有一个动作是玩家。
我目前在Box2D中使用b2ContactListener(好吧,无论如何,我自己的一个子类),并且一直在BeginContact中的接触面中使用流形的局部法线。我遇到的主要问题是法线似乎受到玩家身体旋转的影响(例如,玩家旋转了90度,或者玩家在撞击时旋转异常-两种情况都给我带来麻烦),而且我似乎如果我尝试允许这样做,最终会导致含糊不清(即与不同面孔的碰撞产生相同的法线...)-尽管我当然可以做一些可怕的错误。现在,我不太了解流形,因此可能是我的问题源自此,或者可能是我遗漏了一些明显的东西。
有什么建议么?我宁愿以最干净,最丑陋的方式进行此操作。请记住,我关心的主要分类是“玩家从上面着陆”还是“其他”,但是我可能最终需要确切的信息。如果您需要更多信息或澄清,请问一下。
编辑:为澄清起见,我知道Box2D中按惯例从A到B的法线点(在A和B之间的冲突),我的代码确实检查了看哪一个是玩家,并在进行操作之前考虑了这一点任何计算以确定被击中的脸。
由于好奇的定义和范围,typedef我在2 .c文件中写下了C代码:
main.c中
#include <stdio.h>
int main()
{
int a = 5, b = 6;
printf("a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("a = %d, b = %d\n", a, b);
}
Run Code Online (Sandbox Code Playgroud)
swap.c
typedef T;
void swap(T* a, T* b)
{
T t = *a;
*a = *b;
*b = t;
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,代码文件可以用Visual Studio C编译器编译(cl.exe /Tc main.c swap.c)
程序运行正常!根据我的理解,typedef需要2个参数,但为什么这个代码编译并运行?
为了进一步分析,在main函数中,我声明了另外2个浮点变量,并尝试在交换2个整数后交换两个,但这次它无法编译(使用cl.exe).令人惊奇的是,代码可以使用Tiny C(tcc.exe main.c swap.c)编译和运行,因此它就像模板方法一样工作!
今天我想我会修改一个如何使用gl-rs(Rust的OpenGL绑定)添加颜色数组并绘制一些点而不是三角形的小例子.琐碎,我想......
但是,我COLOUR_DATA似乎以某种方式用于顶点位置.
特定
static VERTEX_DATA: [GLfloat, ..6] = [
0.2, 0.0,
0.0, 0.2,
0.0, 0.0];
static COLOUR_DATA: [GLfloat, ..12] = [
0.0, 0.5, 0.0, 1.0,
0.5, 0.0, 0.0, 1.0,
0.0, 0.0, 5.0, 1.0];
Run Code Online (Sandbox Code Playgroud)
很明显,下面的屏幕截图中的点是前6个值COLOUR_DATA,而不是VERTEX_DATA.当我注释掉"问题"消失BindBuffer和BufferData有关我的颜色缓冲区对象的调用.
源代码在屏幕截图下方,当然删除BindBuffer/ BufferData也意味着删除EnableVertexAttribArray和VertexAttribPointer类以便编译,但它们对手头的情况没有影响).
为什么会发生这种情况,我该如何避免呢?我只是缺少一些明显的东西吗?或者我在这里处理更深层次的事情(例如gl-rs中的错误)?

#![feature(globs)]
extern crate gl;
extern crate glfw;
extern crate native;
use gl::types::*;
use glfw::Context;
use std::mem;
use std::ptr;
use std::str;
// Vertex data …Run Code Online (Sandbox Code Playgroud) 我有一个Option片,给定一个值,如果该值是切片中的有效索引,我想使用该索引处的值,否则使用None.
现在,值必须能够被重用,所以我想我想借用我的切片,而不是移动...注意,这Foo并没有实现Copy特性,我宁愿保持这种方式.
我需要经常这样做,所以函数返回&Option<Foo>似乎是合适的,添加了一个生命周期说明符,因为显然返回值不应该超过它借来的切片.这导致我:
fn get_or_none<'a>(data: &'a [Option<Foo>], bar: u8) -> &'a Option<Foo> {
match bar as usize {
idx if idx < data.len() => &data[idx],
_ => &None // obviously can't work
}
}
Run Code Online (Sandbox Code Playgroud)
这显然是错误的.我现在可以作弊,因为我知道对于这个特定的应用程序,切片中的第一个值将始终为None(这是我的数据的属性,可以这么说),但这只是避免了问题.
我该怎么做呢?
在C中,我发现如果发生运行时错误,则返回垃圾值.但是为什么在这种情况下会返回垃圾值?
此代码将给出运行时错误.我知道为什么在这里发生运行时错误.但我想知道为什么返回值是垃圾值.
#include<stdio.h>
int main()
{
int *x;
*x = 10;
return 0;
}
Run Code Online (Sandbox Code Playgroud)