小编Wes*_*Wes的帖子

从String中删除单个尾随换行而不进行克隆

我写了一个函数来提示输入并返回结果.在此版本中,返回的字符串包含用户的尾随换行符.我想将该换行符(以及该换行符)删除后返回输入:

fn read_with_prompt(prompt: &str) -> io::Result<String> {
    let stdout = io::stdout();
    let reader = io::stdin();
    let mut input = String::new();
    print!("{}", prompt);
    stdout.lock().flush().unwrap();
    reader.read_line(&mut input)?;

    // TODO: Remove trailing newline if present
    Ok(input)
}
Run Code Online (Sandbox Code Playgroud)

仅删除单个尾随换行符的原因是此函数还将用于提示输入密码(适当使用termios以停止回显),如果某人的密码具有尾随空格,则应保留该空格.

在关于如何在字符串末尾实际删除单个换行符之后,我最终使用了trim_right_matches.然而,返回一个&str.我试图用它Cow来处理这个但是错误仍然说input变量不够长.

fn read_with_prompt<'a>(prompt: &str) -> io::Result<Cow<'a, str>> {
    let stdout = io::stdout();
    let reader = io::stdin();
    let mut input = String::new();
    print!("{}", prompt);
    stdout.lock().flush().unwrap();
    reader.read_line(&mut input)?;

    let mut trimmed = false;
    Ok(Cow::Borrowed(input.trim_right_matches(|c| {
        if !trimmed …
Run Code Online (Sandbox Code Playgroud)

string rust

12
推荐指数
4
解决办法
1万
查看次数

将分支移动到新标记

我的个人Wordpress安装是从GitHub上的wordpress git镜像克隆的.我检查了2.7.1标签到分支"稳定"(git checkout -b stable 2.7.1)并且它一直运行正常.现在WordPress 2.8已经发布我想将我的稳定分支移动到2.8标签.

我尝试了以下(所有在稳定分支上)但在尝试应用每个提交时遇到冲突,这似乎不对.我没有对稳定分支进行本地更改/提交.

git fetch 
git fetch --tags
git rebase 2.8

First, rewinding head to replay your work on top of it...
Applying: Prepare the branch for the inevitable.
error: patch failed: wp-includes/version.php:8
error: wp-includes/version.php: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging wp-includes/version.php
CONFLICT (content): Merge conflict in wp-includes/version.php
Failed to merge in the changes.
Patch failed …
Run Code Online (Sandbox Code Playgroud)

tags git branch rebase

10
推荐指数
2
解决办法
7451
查看次数

使用ARC在块中设置NSError

我希望使用自动引用计数从项目的块中设置NSError指针.以下是我的代码的简化版本:

- (BOOL)frobnicateReturningError:(NSError **)error
{
    NSArray *items = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];

    __block Frobnicator *blockSelf = self;
    [items enumerateObjectsUsingBlock:^(id item, NSUInteger idx, BOOL *stop) {
        [blockSelf doSomethingWithItem:item error:error];
    }];
}
Run Code Online (Sandbox Code Playgroud)

这个编译但是给定error可以修改 doSomethingWithItem我尝试为要修改的块创建一个本地NSError,然后用于error在枚举之后设置原始(我没有显示):

- (BOOL)frobnicateReturningError:(NSError **)error
{
    NSArray *items = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];

    __block Frobnicator *blockSelf = self;
    __block NSError *blockError = nil;
    [items enumerateObjectsUsingBlock:^(id item, NSUInteger idx, BOOL *stop) {
        [blockSelf doSomethingWithItem:item error:&blockError];
    }];
}
Run Code Online (Sandbox Code Playgroud)

无法编译时出现以下错误:

将非本地对象的地址传递给__autoreleasing参数以进行回写

谷歌搜索此错误只返回Clang源代码本身的结果.

一个看起来有效但有点难看的解决方案是有一个内部和外部错误指针:

- (BOOL)frobnicateReturningError:(NSError **)error …
Run Code Online (Sandbox Code Playgroud)

objective-c nserror objective-c-blocks automatic-ref-counting

10
推荐指数
1
解决办法
6077
查看次数

便携式等效的GNU使%风格的模式规则

我正在按照Autotools页面上的使用检查的指示,试图在(当前)小型C项目中构建对单元测试的支持.虽然我使用的是Cgreen而不是Check.

我遇到了第9步的问题,这导致automake发出关于使用'%'的警告 - 样式模式规则是GNU make扩展.

具体的制定规则是:

check_%.$(OBJEXT) : $(srcdir)/%.c
    $(COMPILE) -DCHECKING -c -o $@ $^
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种等效的方法来指定不依赖于gnu make扩展的规则.

c automake portability makefile gnu-make

5
推荐指数
1
解决办法
2635
查看次数