AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-169252

transient_loop's questions

Martin Hope
unsafe_where_true
Asked: 2025-04-06 02:54:30 +0800 CST

Extraindo apenas um subconjunto de uma string JSON em go

  • 6

Estou recebendo uma string JSON muito longa de uma API.

Basicamente parece com isso: {"data":{.......},"needs_trial": false, "adjust_time": false,"attempts": 1234}

Preciso de tudo dentro da dataseção sem o "apêndice" como uma string .

Tentei usar a abordagem usual ao analisar JSON em Go:

//fetch the data with http.Get into resp.Body

type MyData struct {
   Data map[string]interface{}
}

var data MyData
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
    return err
}

Eu entendi a seção certa, claro, mas agora como um map[string]interface{}óbvio. Que eu falhei em converter de volta para uma string...

Definir o Datacampo de MyDatacomo stringtambém falha.

Não posso simplesmente cortá-lo, porque a parte do prefixo é fixa ( {"data":), mas a parte final não.

Não acredito que não consegui fazer isso, por isso estou perguntando aqui... Já gastei tanto tempo nisso que posso aceitar os votos negativos...

json
  • 1 respostas
  • 42 Views
Martin Hope
unsafe_where_true
Asked: 2024-09-23 03:05:18 +0800 CST

"O valor do tipo associado deve ser especificado"

  • 5

Estou escrevendo um aplicativo de gerenciamento de tarefas de linha de comando para aprender Rust.

Até agora tenho um sqllite e uma fonte de dados de memória.

pub struct TaskManager {
    source: Datasource, // here rustc complains
}

O gerente tem uma referência a um Datasource, que é uma característica:

pub trait Datasource {
    type Settings;

    fn start(&self) -> Result<bool>;
}

O Main lê argumentos CLI e decide com base neles qual fonte de dados deve ser instanciada.

No entanto, Rust me diz

"- rustc: o valor do tipo associado Settingsem source::Datasourcedeve ser especificado [E0191]"

Entendo que os tipos devem ser especificados em tempo de compilação, e ambas as fontes até agora têm seus tipos especificados.

impl Datasource for SqlLiteDataSource {
    type Settings = SqlLiteSettings;
}

impl Datasource for MemoryDataSource {
    type Settings = MemorySettings;
}

E ao analisar os argumentos cli, todos os braços são avaliados:

    pub fn new(datasource: Datasources) -> Self {
        let ds: Datasource = match datasource {
            Datasources::SqlLite { path } => SqlLiteDataSource::new(path.to_string()),
            _ => MemoryDataSource::new(),
        };
   }

Na verdade, o rustc também está reclamando aqui com o mesmo erro.

A ideia era que cada implementação concreta tivesse suas próprias configurações. Como posso então atribuir uma variável de trait genérica ao TaskManager, para que um backend conclua o gerenciamento de tarefas dependendo da fonte fornecida?

rust
  • 1 respostas
  • 48 Views
Martin Hope
unsafe_where_true
Asked: 2024-09-19 01:26:24 +0800 CST

Pergunta muito básica sobre caixas, pacotes e módulos em Rust

  • 5
 ~/rust/first
   src
  │  app
  │ │  src
  │ │ │  lib.rs
  │ │ └  entry.rs                  E
  │ └  Cargo.toml
  └  main.rs                     E 
   Cargo.lock                     
   Cargo.toml                     

Este é meu primeiro projeto que estou montando em Rust.

Há um struct Entry{}em . As listas src/app/src/entry.rsde nível superior em sua seção. O -level define .Cargo.tomlmembers = ["src/app"][workspace]appCargo.toml[package]name="app"

No nível superior main.rseu simplesmente tenho let app = app::Entry::new();, mas o compilador diz "uso de caixa ou módulo não declarado app".

Por que declarar o pacote "app" no subdiretório e depois defini-lo como um membro no espaço de trabalho no nível superior não é suficiente para Entryser visto no main.rs de nível superior?

Se eu adicionar app = { path = "./src/app" }à dependenciesseção, então funciona. Mas então por que ter membros do workspace?

O que estou perdendo?

rust
  • 1 respostas
  • 37 Views
Martin Hope
unsafe_where_true
Asked: 2024-09-03 03:16:46 +0800 CST

Correspondendo a uma única variante de enumeração em um teste, não interessado em outras correspondências

  • 5
pub enum State {
   Started(Vec<Id>),
   InProgress,
   Terminated
}

pub trait Locker {
  async fn start(&mut self, id: Id) -> State; 
}

#[tokio::test]
async fn test_locker() {
   let State::Started(ids) = locker.start().await;
}

Entendo que o compilador reclama test_lockerque nem todas as correspondências foram abordadas.

Mas falhei em identificar como consertar isso. Na verdade, neste teste, sei que só pode ser esse estado, então não preciso realmente de uma correspondência.

Eu tentei várias coisas:

let State::Started(ids) = locker.start().await;
assert!(matches!(ids, State::Started(ids)));

Eu esperava que isso falhasse, pois os idsna primeira linha já estão digitados como State::Started.

Também tentei declarar let ids:Vec<Id>antes, mas isso parece estar em algum tipo de escopo diferente, pois não posso fazer issolet State::Started(ids) = ...

Acho que eu poderia simplesmente fazer uma correspondência primeiro e ignorar todas as outras opções, mas acho que deveria haver uma maneira mais elegante?

rust
  • 1 respostas
  • 34 Views
Martin Hope
unsafe_where_true
Asked: 2024-08-27 11:07:21 +0800 CST

Como atualizar uma coleção dentro de uma struct em Rust?

  • 4

Provavelmente essa pergunta já foi feita, talvez com uma formulação diferente, mas não consegui encontrá-la. Se isso for fechado por causa disso, peço desculpas, mas eu tentei antes.

Na verdade, o problema é simples:

use std::collections::BTreeSet;

pub struct Service {
    blobs: BTreeSet<u16>,
}

impl Service {
    fn new() -> Self {
        let bt: BTreeSet<u16> = BTreeSet::new();
        Self { blobs: bt }
    }

    fn insert(&self, val: u16) -> bool {
        &self.blobs.insert(val);
        true
    }
    fn print(&self) {
        println!("{}", self.blobs.len());
    }
}
fn main() {
    let s: Service = Service::new();
    s.print();
    s.insert(4);
    s.print();
}

Ao compilar isso, obtenho:

`self` is a `&` reference, so the data it refers to cannot be borrowed as mutable

O que eu entendo aqui é que, na verdade, não posso simplesmente atualizar o treeset, pois ele é imutável.

Então eu tentei com

pub struct Service {
    blobs: &'static mut BTreeSet<u16>,
}

e

  fn new() -> Self {
        let bt: &mut BTreeSet<u16> = &mut BTreeSet::new();
        Self { blobs: bt }
    }

mas isso produz creates a temporary value which is freed while still in use (enquanto o erro original ainda está lá, então agora tenho dois...)

Entendo que eu deveria, de alguma forma, tornar o BTreeSetmutável, mas como?

rust
  • 1 respostas
  • 91 Views
Martin Hope
unsafe_where_true
Asked: 2024-03-07 00:34:14 +0800 CST

Qual é a diferença entre uma string decodificada hexadecimal e uma string.as_bytes()?

  • 3

Estou fazendo hash de uma string.

let src = String::from("abcd12342020");
let h1 = sha2::Sha256::digest(&src.as_bytes());
let h2 = sha2::Sha256::digest(hex::decode(&src).expect("this is not hex"));

h1e h2são diferentes. Qual é a razão subjacente ? Qual é a diferença entre uma representação de bytes e uma representação hexadecimal? (Tentei fornecer um playground, mas a hexcriação não está disponível lá)

string
  • 1 respostas
  • 34 Views
Martin Hope
transient_loop
Asked: 2024-03-02 05:35:09 +0800 CST

ferrugem: inicialização do mapa estático com chaves enum

  • 5

Primeiro: sou um novato no Rust; aprendizado.

Esta questão surge provavelmente do pensamento em termos de outras línguas. Então, provavelmente, a melhor solução é fazer isso de uma maneira completamente diferente. As coisas ainda nem compilam, então peço desculpas se o código tiver problemas fundamentais.

Estou definindo minha primeira característica. A função trait leva 2 parâmetros, que definirão a saída.

trait SkFormatter {
  fn to_sk(&self, key:Key, is_foreign: bool) -> String;
}

A ideia é que a implementação pegue uma variável de string, acrescente uma string dependendo da chave e acrescente uma string if is_foreign(esta última parte não é relevante para a questão).

Por exemplo

MT-1c2af34
WD-54bdf36-FX
WD-ad3425b

Como essas strings são constantes, pensei que poderia fazer isso como um mapeamento global. Então eu criei primeiro

pub enum Key {
  // there are 7 items, but keeping it short here
  Metal,
  Wood,
}

Aí quis criar o mapeamento e as coisas começaram a ficar complicadas. Tentei o HashMap primeiro:

use std::collections::HashMap;
static KEY_TO_PRE:HashMap<Key,&str> = HashMap::from([
  (Key::Metal,"MT-"),
  (Key::Wood, "WD-"),
]);

Mas isso estava reclamando com

o limite da característica Key: std::hash::Hashnão está satisfeito

O que é surpreendente para mim, pois parece sugerir que a chave não é hashável, mas não estou definindo um tipo para ela, e assumiria que um tipo enum "semelhante a uma unidade", conforme documentado, é algum tipo de número inteiro ou alguma coisa?

Eu vi o matchidioma, talvez eu devesse tentar isso apenas dentro da implementação (coisas globais e estáticas são fedorentas para mim), mas não está claro para mim se a coisa da correspondência otimiza para reutilização, pois será chamada repetidamente.

Apenas aprendendo...

rust
  • 1 respostas
  • 18 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve