小编Jam*_*lor的帖子

避免共享静态变量的“Sync”

我有以下定义:

struct MyCustomFactory;

trait Factory {
    fn new<'a>(entity: &'a str) -> Arc<dyn Display + 'a>
    where
        Self: Sized;
}

impl Factory for MyCustomFactory {
    fn new<'a>(entity: &'a str) -> Arc<dyn Display + 'a>
    where
        Self: Sized,
    {
        Arc::new(entity)
    }
}
Run Code Online (Sandbox Code Playgroud)

更高层次的问题:

我正在尝试创建一个全局静态(且不可变)的字符串映射到实现该Factory特征的结构。目标是,对于映射的任何值成员,我可以将其视为 a Factorynew对其进行调用,然后将得到(在本例中)实现该特征的东西Display

我有以下内容:

struct MyCustomFactory;

trait Factory {
    fn new<'a>(entity: &'a str) -> Arc<dyn Display + 'a>
    where
        Self: Sized;
}

impl Factory for MyCustomFactory {
    fn new<'a>(entity: &'a str) …
Run Code Online (Sandbox Code Playgroud)

rust

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

使用exiftool编辑MP4元数据

我有一个带Title元数据的MP4文件:

exiftool movie.mp4
Run Code Online (Sandbox Code Playgroud)

这使:

Audio Bits Per Sample           : 16
Audio Sample Rate               : 48000
Handler Type                    : Metadata
Handler Vendor ID               : Apple
Title                           : Movie Title
Run Code Online (Sandbox Code Playgroud)

我想完全删除此Title元数据.我试过覆盖标题:

exiftool -Title="" movie.mp4
exiftool -Title= movie.mp4
exiftool -Title="" -overwrite_original movie.mp4
Run Code Online (Sandbox Code Playgroud)

该命令需要一段时间才能执行,但退出时:

0 image files updated
1 image files unchanged
Run Code Online (Sandbox Code Playgroud)

我做错了什么?如何查看exiftool错误是什么?如何删除Title属性?根据手册页,MP4似乎是受支持的文件类型.

非常感谢你的帮助!

exiftool

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

当给定的枚举不是某种变体时,如何返回None?

我定义了以下枚举:

#[derive(Debug, Copy, Clone)]
struct Core;

#[derive(Debug, Copy, Clone)]
struct Mem;

#[derive(Debug, Copy, Clone)]
pub enum Atag {
    Core(Core),
    Mem(Mem),
    Cmd(&'static str),
    Unknown(u32),
    None,
}
Run Code Online (Sandbox Code Playgroud)

我想在这个enum上实现一个"过滤掉"某些枚举值的函数.我有以下内容:

impl Atag {
    /// Returns `Some` if this is a `Core` ATAG. Otherwise returns `None`.
    pub fn core(self) -> Option<Core> {
        match self {
            Atag::Core => Some(self),
            _ => None
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但编译器抱怨:

error[E0532]: expected unit struct/variant or constant, found tuple variant `Atag::Core`
  --> src/main.rs:17:13
   |
17 |             Atag::Core => Some(self),
   |             ^^^^^^^^^^ …
Run Code Online (Sandbox Code Playgroud)

rust

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

密钥哈希是否包含等号?

当我生成 Android 密钥哈希(用于 Facebook)时,我注意到末尾有一个等号。当你向 Facebook 开发者注册你的密钥哈希值时,你是否应该包含这一点?

hash android facebook key

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

绑定到Readline库中的箭头键

我正在尝试使用GNU Readline库绑定到C中的箭头键.我已经打印出所有可能的ASCII(0-255)键值组合rl_bind_key,但似乎没有检测到箭头键.

我怎么能绑定他们?

static int readline_func(int count, int key) {
   printf("key pressed\n");
   return 0;
}

int i = 0;
for (; i < 255; i++) {
    rl_bind_key(i, readline_func);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

c readline

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

在OCaml中循环遍历数组的前n个元素

我在OCaml中有以下函数,它将c作为参数传递的数组中的第一个元素相加:

let rec sum_array c a =
    if c < 0 then 0
    else a.(c) + sum_array (c - 1) a;;
Run Code Online (Sandbox Code Playgroud)

我碰巧知道数组a是高级的,所以我想设置它.我试过了:

fun c -> let int_array = [| 1 ; 2 ; 3 ; 4 ; 5 |] in
    let rec sum_array c =
        if c < 0 then 0
        else int_array.(c) + sum_array (c - 1);;
Run Code Online (Sandbox Code Playgroud)

但OCaml抱怨模糊的"错误:语法错误",这是非常有用的.

  1. 如何修复此功能定义?如何指定我想要sum_array返回的值?
  2. 如何让OCaml报告更多有用的错误消息?

arrays ocaml

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

成功获取数据后,事件单击会多次触发

我有这样简单的脚本:

(function($) {
    $(document).ready(function() {
        function getData() {
            $.ajax({
                url: '/path/to/file',
                type: 'GET',
                dataType: 'json',
                success: function(response) {
                    var text = response.jsontitle;

                    $('#link').attr('class', '');
                    $('#link').attr('class', text);

                    // Second, Third, Fourth .... after get data
                    // Click fires 2, 3, 4 .... after get data
                    $('#link').on('click', function() {
                        console.log($(this).attr('class'));
                    })
                }
            });
        }

        var refreshData = setInterval(getData, 5000);

        getData();
    });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我希望每个时间间隔只发生一次click事件.但是,当前,click事件会发生多次getData().

例如,如果getData()发生两次,则click事件也会发生两次.

javascript jquery

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

将浮点值复制到char数组中

我正在用C写一个TCP套接字来发送我正在处理的项目的位置数据.

到目前为止,一切正常,但我正在努力解决这个看似简单的问题.我正在尝试构建一个将通过套接字发送的JSON字符串.我有一个字符数组(代表字符串)json定义为:

char json[1024];
Run Code Online (Sandbox Code Playgroud)

使用方法原型:

const char* build_json(void);
Run Code Online (Sandbox Code Playgroud)

和方法体:

const char* build_json(void) {
    strcpy(json, "{");
    strcat(json, "\"latitude\":");
    sprintf(json, "%0.5f", latitude);
    strcat(json, "}");
    return json;
}
Run Code Online (Sandbox Code Playgroud)

我知道这latitude是正确定义的,应该是float大约5位小数.

但是,当我打电话时build_json();,38.925034}唯一的回报是什么.为什么会这样?似乎要求sprintf覆盖已经写入的内容json.

谢谢你的帮助!

c string strcpy strcat

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

双重调用递归(C++)

有人可以向我解释这究竟是如何加起来26?

我对"双重呼叫"感到困惑.也许我只是不理解递归以及我认为我做的.

#include <iostream>
using namespace std;

int rec(int * N, int max) {
    if (max < 0)
        return 0;

    return N[max] + rec(N, max - 1) + rec(N, max - 2); 
}

int main() {
   const int max = 5;
    int N[] = { 1, 2, 3, 4, 5 };
    int f = rec(N, max - 1);

    cout << f << endl; 
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ recursion

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

Future 不是 Send,仅当来自 async Trait 时

我有一个特点Serializer

trait Serializer {
    fn serialize(&self, data: Rc<()>) -> Result<(), Error>;
}
Run Code Online (Sandbox Code Playgroud)

还有一些Foo实现它的。值得注意的是,data不是Send

实际的实现需要异步上下文来执行,因此我将异步运行时的创建与实际的实现分开,如下所示:

struct Foo {}

impl Foo {
    async fn async_serialize(&self, _data: Rc<()>) -> Result<(), Error> {
        unimplemented!();
    }
}

impl Serializer for Foo {
    fn serialize(&self, data: Rc<()>) -> Result<(), Error> {
        let runtime = Builder::new_current_thread().enable_all().build().unwrap();
        runtime.block_on(async move { self.async_serialize(data).await })
    }
}
Run Code Online (Sandbox Code Playgroud)

这将按照我的预期进行编译和工作。

如果我重构代码,以便通过特征完成异步运行时创建:

#[async_trait]
trait AsyncSerializer {
    async fn async_serialize(&self, data: Rc<()>) -> Result<(), …
Run Code Online (Sandbox Code Playgroud)

rust

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

标签 统计

rust ×3

c ×2

android ×1

arrays ×1

c++ ×1

exiftool ×1

facebook ×1

hash ×1

javascript ×1

jquery ×1

key ×1

ocaml ×1

readline ×1

recursion ×1

strcat ×1

strcpy ×1

string ×1