小编Phi*_*els的帖子

无法使用format_args!由于临时值在此语句结束时被释放

我正在尝试构建自己的自定义LogRecord并将其传递到日志箱中。

use log::RecordBuilder;

fn main() {
    let msg = format_args!("Completed: {}, Elapsed={:?}", "blah", 20);
    //let msg = format_args!("This is OK");
    let mut builder = RecordBuilder::new();
    let _log_rec = builder
        .args(msg)
        .build();
}
Run Code Online (Sandbox Code Playgroud)

我在调用args方法时遇到了临时的生命周期问题。错误是

 --> src/main.rs:4:28
  |
4 |     let msg = format_args!("Completed: {}, Elapsed={:?}", "blah", 20);
  |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             - temporary value is freed at the end of this statement
  |                            |
  |                            creates a temporary which is freed while still in use
...
8 …
Run Code Online (Sandbox Code Playgroud)

rust

8
推荐指数
1
解决办法
1349
查看次数

从C#调用Edge.js时,如何挂钩stdout和stderr?

背景

我正在开发一个C#程序,它目前通过Process.Start()运行Node.我从这个子进程捕获stdout和stderr并根据我自己的原因重定向它.我正在寻找通过调用Edge.js替换Node.exe的调用.为了能够做到这一点,我必须能够从Edge中运行的Javascript中可靠地捕获stdout和stderr,并将消息返回到我的C#应用​​程序中.

方法1

我将描述这种方法的完整性,以防任何人推荐:)

如果Edge进程终止,通过简单地声明一个msgs数组并覆盖process.stdout.write以及process.stderr.write在该数组上累积消息的新函数来处理这个问题是相当容易的,然后在最后,只返回msgs数组.例:

var msgs = [];
process.stdout.write = function (string) {
    msgs.push({ stream: 'o', message : string });
};
process.stderr.write = function (string) {
    msgs.push({ stream: 'e', message: string });
};

// Return to caller.
var result = { messages: msgs; ...other stuff... };
callback(null, result);
Run Code Online (Sandbox Code Playgroud)

显然,这仅在Edge代码终止时有效,并且在最坏的情况下msgs可能会变大.但是,它可能表现良好,因为只需要一次编组调用即可获得所有消息.

方法2

这有点难以解释.我们使用从C#发送的委托来"挂钩"stdout和stderr,而不是累积消息.在C#中,我们创建了一个将传递给Edge的对象,该对象具有一个名为的属性stdoutHook:

dynamic payload = new ExpandoObject();
payload.stdoutHook = GetStdoutHook();

public Func<object, Task<object>> GetStdoutHook()
{
    Func<object, Task<object>> hook = (message) …
Run Code Online (Sandbox Code Playgroud)

stdout task-parallel-library node.js async-await edge.js

7
推荐指数
1
解决办法
1250
查看次数

如何在Meteor中发布集合的视图/转换?

我已经收藏了

var Words = new Meteor.Collection("words");
Run Code Online (Sandbox Code Playgroud)

并发表它:

Meteor.publish("words", function() {
    return Words.find();
});
Run Code Online (Sandbox Code Playgroud)

这样我就可以在客户端上访问它了.问题是,这个集合会变得非常大,我只想发布它的变换.例如,假设我想发布一个名为"num words by length"的摘要,这是一个int数组,其中索引是单词的长度,item是该长度的单词数.所以

wordsByLength[5] = 12;
Run Code Online (Sandbox Code Playgroud)

表示有12个长度为5的单词.在SQL术语中,它是原始数据集上的简单GROUP BY/COUNT.我正在尝试在客户端上创建一个类似的模板

  • 你有N个长度为X的单词

每个长度.我的问题归结为"我的表格A中有我的数据,我想发布一个转换后的版本,B".

meteor

3
推荐指数
1
解决办法
2487
查看次数

标准化后的Git行结束

这一行结束问题让我疯狂......

背景:从历史上看,我使用的是core.autocrlf设置,但我发现我遇到了不同的repos表现不好的问题(我在Windows上工作,我有一些需要LF结尾的repos和一些需要CRLF结尾的repos).所以我试图摆脱它并在每个存储库中使用.gitattributes(我希望Git只是闭嘴并让我管理行结尾!).所以,我现在有core.autocrlf=false和一个.gitattributes看起来像这样对我工作的一个Visual Studio项目:

# Don't do any end of line normalization.
* -text

# Always treat these files as binary. Not strictly necessary, but can't hurt.
*.png binary
*.gif binary
*.jpg binary
*.jpeg binary
*.dll binary
*.doc binary
*.docx binary
*.xls binary
*.xlsx binary
*.pdf binary
Run Code Online (Sandbox Code Playgroud)

我已经使用unix2dos将repo中的所有文件强制为CRLF结尾并确认它们在工作目录中具有正确的行结尾,并将它们全部检入.是的我遵循了这里的建议尝试使用git过滤器修复行结尾 - 分手,但没有运气

这几乎是完美的.

问题是每当我更改文件时,git报告它在更改的行上有行结束差异,例如,如果原始行是

string s;
Run Code Online (Sandbox Code Playgroud)

并且更改的行是

string sucks;
Run Code Online (Sandbox Code Playgroud)

git diff将更改显示为

string sucks;^M
Run Code Online (Sandbox Code Playgroud)

看起来Git认为repo中的文件仍然有LF结尾(因为它们在过去被标准化了?).^ M会产生大量的视觉噪音,我不确定这是否是其他任何问题的症状.我不明白为什么Git会报告差异,因为我在之前的提交中检查了所有带有CRLF结尾的文件,实际上是在此之前的提交.

那么为什么我会得到这些"假的"差异,我怎么能摆脱它们呢?

git

3
推荐指数
1
解决办法
1145
查看次数

深度嵌套动态结构的 YamlDotNet 反序列化

我有一个深层嵌套的对象模型:

public class CheatSheet {
    public string Leader { get; set; }
    public List<Section> Sections { get; set; }
}

public class Section {
    public string Title { get; set; }
    public List<SubSection> SubSections { get; set; }
}

public class SubSection {
    public string Title { get; set; }
    public List<Cheat> Cheats { get; set; }
}

public class Cheat {
    public string Affected { get; set; }
    public string Text { get; set; }
    public string Hint { …
Run Code Online (Sandbox Code Playgroud)

c# yamldotnet

3
推荐指数
1
解决办法
7215
查看次数

TFS/VS 2012 RC - VSSConverter.exe在哪里?

我正在使用刚刚发布的RC安装一个全新的TFS 2012安装虚拟机.这是我们第一次尝试在我公司使用TFS,我需要升级一些SourceSafe数据库.我还为Visual Studio 2012 Ultimate Edition安装了RC(除了MFC基础类之外的所有东西),但我仍然找不到VSSConverter.exe工具.

根据Google的说法,它应该在Common7\Ide文件夹中,但无处可见.不可否认,我目前唯一可以找到的互联网链接是针对VS2010所以它们可能已经过时了,但是我已经扫描了整个C盘但仍然无法找到VSSConverter.exe

PS.我知道在TFS管理控制台中有一个"下载并安装VSS转换器"链接,但这只是带我到Microsoft主页!:http://www.microsoft.com/en-us/default.aspx

vssconverter visual-studio-2012 tfs2012

2
推荐指数
1
解决办法
2193
查看次数

更改 VS2017 NuGet 包构建的放置文件夹

在 VS2017 中,当您勾选Project Properties -> Package页面上的选项以在 build 上生成 NuGet 包时,它会将生成的包放在输出文件夹下的某处,例如在 Debug 下的某处。

是否可以将其更改为特定文件夹,或者更好的是,将其更改为环境变量指定的某个位置?

nuget visual-studio-2017

0
推荐指数
1
解决办法
777
查看次数