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-1987726

Reinhard Männer's questions

Martin Hope
Reinhard Männer
Asked: 2024-09-29 22:19:39 +0800 CST

Como testar uma função genérica usando o Swift Testing com parâmetros?

  • 6

A configuração:
Meu aplicativo tem uma função genérica que espelha pontualmente uma matriz quadrática de elementos arbitrários em seu centro:

func pointMirroredMatrix<T>(_ matrix: inout [[T]]) {
    assert(matrix.count > 0 && matrix[0].count > 0) // Ensure matrix is not empty
    assert(matrix.count == matrix[0].count) // Ensure matrix is quadratic
    let n = matrix.count // The matrix is n x n
    for row in 0 ..< n/2 {
        for col in 0 ..< n {
            // Swapping elements
            (matrix[row][col], matrix[n - 1 - row][n - 1 - col]) = (matrix[n - 1 - row][n - 1 - col], matrix[row][col])
        }
    }
}

Quero escrever um teste Swift que verifique se func pointMirroredMatrixfunciona corretamente.
Assim, defini primeiro:

typealias PointMirroredMatrixParams = (matrix: [[Any]], expectedResult: [[Any]])
let pointMirroredMatrixArgs: [PointMirroredMatrixParams] = [(matrix:         [[0, 1], [0, 0]], 
                                                             expectedResult: [[0, 0], [1, 0]])]

struct VisionTests {
    
    @Test("pointMirroredMatrix", arguments: pointMirroredMatrixArgs)
    func pointMirroredMatrix(p: PointMirroredMatrixParams) throws {
        // see below
    }  

Observe que os elementos da matriz são do tipo Any, porque @Testnão permite usar genéricos.
O teste deve fazer algo como o seguinte:

var mirroredMatrix = deepCopyMatrix(p.matrix) // Make deep copy
vision.pointMirroredMatrix(&mirroredMatrix) // Mirror the copy
let mirroredCorrectly = maticesAreEqual(p.expectedResult, mirroredMatrix)
#expect(mirroredCorrectly)  

O problema:
Não consigo escrever func maticesAreEqual, porque as matrizes passadas pelos parâmetros de teste são do tipo Any. Tentei o seguinte sem sucesso:

func maticesAreEqual(_ matrix1: [[Any]], _ matrix2: [[Any]]) -> Bool {
    guard matrix1.count == matrix2.count else { return false }
    guard matrix1[0].count == matrix2[0].count else { return false }
    guard !matrix1.isEmpty else { return true }
    guard type(of: matrix1[0][0]) == type(of: matrix2[0][0]) else { return false }
    guard type(of: matrix1[0][0]) == (any Equatable).self else { return false }
    // Here it is known that both matrices have the same dimension, their elements are of the same type and are equatable
    // But how to find out if they are equal?
    for i in 0 ..< matrix1.count {
        for j in 0 ..< matrix1[i].count {
            if matrix1[i][j] != matrix2[i][j] { return false } // Build error
        }
    }
    return true
}  

mas a instrução no loop interno não compila devido ao tipo Any. Eu recebo o erro Type 'Any' cannot conform to 'Collection'.

Minha pergunta:
Como posso testar func pointMirroredMatrixcom matrizes que possuem elementos de tipos diferentes, passados ​​por @Test?

swift
  • 1 respostas
  • 25 Views
Martin Hope
Reinhard Männer
Asked: 2024-09-25 19:22:12 +0800 CST

Não é possível verificar a igualdade para matrizes de dois diminutos de tuplas equacionáveis

  • 6

Não entendo a seguinte situação:

let a1: [[Double]] = [[1]]
let equ1 = a1 == a1 // This builds

let t1: (Double, Double) = (1, 1)
let equ2 = t1 == t1 // This builds also

let a2: [[(Double, Double)]]  = [[(1,1)]]
let equ3 = a2 == a2 // This gives a build error

O erro de construção é

Binary operator '==' cannot be applied to two '[[(Double, Double)]]' operands  

Por que posso verificar a igualdade para uma matriz de dois dim de Double, para uma tupla de 2 Doubles, mas não para uma matriz de dois dim desta tupla?

swift
  • 2 respostas
  • 16 Views
Martin Hope
Reinhard Männer
Asked: 2024-07-03 18:56:17 +0800 CST

Como acessar uma propriedade estática do Swift 6 segura para simultaneidade?

  • 7

Meu aplicativo usa uma classe Ae suas subclasses SubA_x. Apossui uma propriedade estática serialNumberque só é modificada pela classe Aquando uma subclasse é inicializada. Ele define uma propriedade let namepara que cada subclasse tenha um nome exclusivo. Aqui está o código:

class A {
    static var serialNumber = 0
    let name: String

    init( /* some parameters */ ) {
        A.serialNumber += 1
        self.name = "\(A.serialNumber)"
    }
}

final class SubA_1: A {
    init( /* some parameters */ ) {
        super.init( /* some parameters */ )
    }
}

Com a verificação estrita de simultaneidade do Swift 6, a linha onde serialNumberé inicializada fornece o erro

A propriedade estática 'serialNumber' não é segura para simultaneidade porque é um estado mutável compartilhado global não isolado

Entendo que cada subclasse Apode ser modificada var serialNumberem qualquer thread, portanto, corridas de dados são possíveis.

Mas como consigo essa funcionalidade de maneira segura para a simultaneidade?

Tentei fornecer serialNumberpor um ator:

actor SerialNumberManager {
    private var serialNumber = 0
    
    func getNextSerialNumber() -> Int {
        serialNumber += 1
        return serialNumber
    }
}

mas não consigo ligar getNextSerialNumber(), initexceto quando inité assíncrono. Mas então posso inicializar uma subclasse apenas em um contexto assíncrono, etc.

Provavelmente eu poderia fornecer minha própria sincronização baseada em GCD, mas deveria haver uma maneira de fazer isso dentro da simultaneidade do Swift.

swift
  • 1 respostas
  • 54 Views
Martin Hope
Reinhard Männer
Asked: 2023-10-15 19:35:47 +0800 CST

Como dedentar um bloco em Python3 no MacOS?

  • 5

Estou aprendendo Python3. Ele é executado no MacOS/Terminal executando python3.
Consegui executar alguns exemplos do livro "Deep Learning with Python, Second Edition", mas agora estou preso a um problema simples de editor:
Se eu inserir as seguintes instruções

>>> with tf.GradientTape as tape:
...     tape.watch(input_const)
...     result = tf.square(input_const)
... 

Não consigo encerrar o bloco de recuo.
Se eu simplesmente digitar return, recebo o erro

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: __enter__
>>> 

Tentei encerrar o recuo usando Shift [, Shift tabe Control [, mas isso não funciona.
Como faço para dedentar um bloco?

Encontrei uma pergunta semelhante aqui , mas sem solução.

python
  • 2 respostas
  • 38 Views
Martin Hope
Reinhard Männer
Asked: 2023-09-03 23:02:56 +0800 CST

Como exibir verticalmente uma série de imagens transformadas no SwiftUI?

  • 5

Meu aplicativo possui uma matriz handde uma estrutura com uma propriedade let blatt: Image. Durante init, an Imageé atribuído a esta propriedade.

Para exibir tal array horizontalmente, eu uso o seguinte código ( scaledWidthé alguma constante):

HStack(spacing: 10) {
    ForEach((0 ..< hand.count), id: \.self) {
        hand[$0].blatt
            .resizable()
            .scaledToFit() 
            .frame(height: scaledWidth)
            .border(.black)
    }
}

Isso fornece a seguinte saída:

insira a descrição da imagem aqui

Isso é o que eu esperava.

Outra matriz deve ser exibida verticalmente. Para isso, estou utilizando o seguinte código:

VStack(spacing: 10) {
    ForEach((0 ..< hand.count), id: \.self) {
        hand[$0].blatt
            .resizable()
            .scaledToFit() 
            .rotationEffect(Angle(degrees: 90))
            .frame(width: scaledWidth, height: scaledWidth)
            .border(.black)
    }
}

Isso fornece adicionalmente a seguinte saída:

insira a descrição da imagem aqui

Aqui, a altura de cada quadro, indicada pelo quadro com borda, é a altura da imagem não girada.

Como conheço a proporção aspectRatioBlattdas imagens, posso ajustar a saída usando .frame(width: scaledWidth, height: scaledWidth / aspectRatioBlatt). Então, os quadros têm as dimensões corretas e o espaçamento correto, mas as imagens internas são muito pequenas. Novamente, a altura do quadro é igual à altura da imagem interna não girada.

Tentei muitos modificadores de visualização e várias combinações, mas falhei. Até tentei usar um layout personalizado como sugerido aqui para o Text vertical , mas também não funcionou.
Claro que eu poderia usar um segundo conjunto de imagens transformadas, mas deveria ser possível sem ele no SwiftUI.

Como fazer certo?

ios
  • 1 respostas
  • 38 Views
Martin Hope
Reinhard Männer
Asked: 2023-08-18 22:17:52 +0800 CST

Não entendo o layout de texto do SwiftUI

  • 5

Eu quero produzir algum texto em todos os 4 lados da exibição. Este é o meu código:

   var body: some View {
        Spacer()
        Text("AA BB CC DD EE FF GG HH")
        Spacer()
        HStack {
            Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: -90))
            Spacer()
            Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: 90))
        }.frame(height: 200)
        Spacer()
        Text("AA BB CC DD EE FF GG HH")
        Spacer()
    }
}

e esta é a saída:
insira a descrição da imagem aqui

Questões:

  • Por que o texto é quebrado à esquerda, mas o mesmo texto não? E como posso evitar embrulhar?
  • Por que o texto deixou uma margem diferente da direita do texto? E como posso torná-los iguais?
swiftui
  • 2 respostas
  • 21 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