我想adb从bash脚本中安装诊断应用程序并从中获取数据.我知道如何开始一个活动adb,但我找不到任何方法来获取数据,除非我打印logcat并解析输出,但这听起来像一个黑客.有没有办法从开始使用的活动中接收数据adb?
我有以下定义:
enum Either<T, U> {
Left(T),
Right(U),
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到#[derive(PartialEq)]这种类型的等价物?我想使用一个match表达式,如:
impl<T: PartialEq, U: PartialEq> PartialEq for Either<T, U> {
fn eq(&self, other: &Either<T, U>) -> bool {
use Either::*;
match (*self, *other) {
(Left(ref a), Left(ref b)) => a == b,
(Right(ref a), Right(ref b)) => a == b,
_ => false,
}
}
}
Run Code Online (Sandbox Code Playgroud)
这既消耗*self和*other,即使我只需要它的match表达,导致错误:
error[E0507]: cannot move out of borrowed content
--> src/lib.rs:9:16
|
9 | match (*self, *other) …Run Code Online (Sandbox Code Playgroud) 我确信在 git 中有一种方法可以做到这一点,但我的搜索结果是空的。有没有一种简单的方法可以从一次提交中获取消息、提交作者、提交日期和其他信息,并使用这些数据修改第二次提交,而无需复制实际的提交内容?
我有一个Swing表单,在JScrollPane中有一个自定义表(它只是一个JPanel,而不是JTable子类),我试图让它打印出来.如果我只是将整个框架发送到打印机,滚动窗格会切断,如果我将框架的大小调整为滚动窗格内容的大小,某种内部屏障会阻止JFrame变得超过1100像素高.
另一种方法是创建对话框的内容窗格而不将其附加到根JFrame,因为JPanel的大小在这种情况下不受限制.但是为了让组件自行调整并调整到适当的大小,我似乎需要使面板可显示,这意味着至少将它添加到JFrame并调用JFrame.pack(),但同样,1100像素限制回来了.
这是我打印组件的代码:
public static void print(final Component comp) {
final float SCALE = .5f;
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(new Printable() {
public int print(Graphics g, PageFormat pf, int page)
throws PrinterException
{
if (page * pf.getImageableHeight() >= SCALE * comp.getHeight())
return NO_SUCH_PAGE;
((Graphics2D)g).translate(pf.getImageableX(), pf.getImageableY()
- page * pf.getImageableHeight());
((Graphics2D)g).scale(SCALE, SCALE);
comp.printAll(g);
return PAGE_EXISTS;
}
});
if (job.printDialog())
try { job.print(); }
catch (PrinterException ex) {}
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,组件的大小为零:
JPanel c = createPanel(); // This JPanel has a JScrollPane in it …Run Code Online (Sandbox Code Playgroud) 假设f()并g()返回Option<T>.
if let (Some(x), Some(y)) = (f(), g()) {
h();
}
Run Code Online (Sandbox Code Playgroud)
如果f()退货None,会g()被评估吗?规范是否保证或禁止评估?
下面的代码涉及一个非常微妙的借用检查器闪避。代码本身描述了推理。问题:
/// Insert a new data element at a given key.
pub fn insert<'a, K: Eq, V>(this: &'a mut Vec<(K, V)>, key: K, val: V) -> &'a mut V {
// Safety: As indicated below, we would like to return val1 directly in the loop,
// but rust will reject this, claiming a double borrow, and we instead use some
// unsafe hacks to circumvent the borrow checker. To show this is safe, consider
// …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个将 an 映射Arc<[T]>到 an的函数,以Iterable供使用flat_map(也就是说,我想调用i.flat_map(my_iter)其他一些i: Iterator<Item=Arc<[T]>>)。
fn my_iter<'a, T>(n: Arc<[T]>) -> slice::Iter<'a, T> {
let t: &'a [T] = &*n.clone();
t.into_iter()
}
Run Code Online (Sandbox Code Playgroud)
上面的函数不起作用,因为n.clone()产生了一个拥有的 type 值Arc<[T]>,我可以取消引用[T]然后借用 get &[T],但是借用的生命周期只持续到函数结束,而'a生命周期持续到客户端删除返回的迭代器。
如何Arc以客户端拥有克隆的所有权的方式克隆 ,以便仅在客户端使用迭代器完成后才删除该值(假设没有其他人使用Arc)?
下面是源迭代器的一些示例代码:
struct BaseIter<T>(Arc<[T]>);
impl<T> Iterator for BaseIter<T> {
type Item = Arc<[T]>;
fn next(&mut self) -> Option<Self::Item> {
Some(self.0.clone())
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于正在生成数据,而不仅仅是借用它,我如何实现BaseIter(data).flat_map(my_iter)(类型为Iterator<&T>)的结果?(实际情况比这更复杂,结果并不总是相同,但所有权语义是相同的。)BaseIter
作为 bash 脚本的一部分,我想重复运行一个程序,并将输出重定向到less. 该程序具有交互元素,因此目标是当您通过窗口的 X 按钮退出程序时,它会通过脚本重新启动。这部分效果很好,但是当我使用管道时less,程序不会自动重新启动,直到我转到控制台并按q。脚本的相关部分:
while :
do
program | less
done
Run Code Online (Sandbox Code Playgroud)
我想less在管道关闭时自行退出,以便程序在没有任何用户干预的情况下重新启动。(这样它的行为就好像管道不存在一样,除非程序运行时您可以查阅控制台以查看当前运行的输出。)
也欢迎此问题的替代解决方案。