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 / coding / 问题

All perguntas(coding)

Martin Hope
Pavel Chersky
Asked: 2025-04-07 23:08:12 +0800 CST

Qual é a eficiência de usar a realização de "uma alocação" de fatias 2D?

  • 7

Estou aprendendo Go e agora cheguei ao ponto de estudar arrays e slices. Estou me referindo a Effective Go e A Tour of Go nesta questão. Tenho algumas dúvidas na formulação da capacidade do slice. Veja os comentários no código abaixo.

package main

import "fmt"

func main() {

    // let's say I need to implement 5x5 picture with 2D slice
    // and I have two ways to do that in acc. with
    // https://go.dev/doc/effective_go#two_dimensional_slices

    // that said:
    // 1. six slices - six underlying arrays
    picture := make([][]uint8, 5)
    for i := range picture {
        picture[i] = make([]uint8, 5)
    }

    // 2. six slices - two* underlying arrays
    // *I THOUGHT the efficiency is hiding in number of arrays
    picture = make([][]uint8, 5)
    pixels := make([]uint8, 25)
    for i := range picture {
        // every iteration pixels[5:] allocates new array...
        picture[i], pixels = pixels[:5], pixels[5:]
        // ...but in the new iteration it's deleted
        // leaving slice of initial pixels array in picture[i]...
    }
    // ...and here we have only two arrays...
    // ...         ^^^ B5t ^^^

    // there are six arrays anyway
    // but their capacity is 5 for picture and
    // 25, 20...5 respectively for its contents
    fmt.Print(cap(picture), " ")
    for i := range picture {
        fmt.Print(cap(picture[i]), " ")
    }
    fmt.Println()
    // if you don't understand let me explain my position
    // capacity is characteristic of underlying array rather than
    // of slice itself

    // in acc. with https://go.dev/tour/moretypes/11
    // "The capacity of a slice is the number of
    // elements in the underlying array..."

    // I believe that capacity of array is immutable one and
    // one array cannot have different cap's at the same time

    picture = make([][]uint8, 5)
    for i := range picture {
        picture[i] = make([]uint8, 5)
    }

    // here we have six arrays but capacity of each is 5
    // so the first solution works efficiently than second one
    //                  I believe
    fmt.Print(cap(picture), " ")
    for i := range picture {
        fmt.Print(cap(picture[i]), " ")
    }
    fmt.Println()

}

A saída deste código é:

5 25 20 15 10 5 
5 5 5 5 5 5 

Alguém pode me explicar onde está escondida a eficiência de usar um método de alocação?

arrays
  • 1 respostas
  • 94 Views
Martin Hope
David
Asked: 2025-04-07 22:51:21 +0800 CST

Dividir valores separados por caracteres em linhas e adicionar uma coluna com índice [duplicado]

  • 5
Esta pergunta já tem respostas aqui :
Numeração de linhas dentro de grupos em um quadro de dados (11 respostas)
Crie um número sequencial (contador) para linhas dentro de cada grupo de um dataframe [duplicado] (6 respostas)
Como contar ocorrências anteriores de IDs agrupadas por data? [duplicado] (2 respostas)
Adicionar um índice (ou contador) a um dataframe por grupo em R [duplicado] (1 resposta)
Existe uma maneira de criar índices dentro de grupos de um quadro de dados em R? [duplicado] (1 resposta)
Fechado há 23 horas .

Posso dividir valores separados por caracteres em uma célula em linhas com tidyr::separate_longer_delim. No entanto, existe uma maneira simples de adicionar uma coluna com um índice?

Eu tenho (exemplo de https://tidyr.tidyverse.org/reference/separate_longer_delim.html )

library(tidyr)
df <- tibble(id = 1:4, x = c("x", "x y", "x y z", NA))
df %>% separate_longer_delim(x, delim = " ")
#> # A tibble: 7 × 2
#>      id x    
#>   <int> <chr>
#> 1     1 x    
#> 2     2 x    
#> 3     2 y    
#> 4     3 x    
#> 5     3 y    
#> 6     3 z    
#> 7     4 NA 

E eu quero

#> # A tibble: 7 × 2
#>      id x     index
#>   <int> <chr> <int>
#> 1     1 x     1
#> 2     2 x     1
#> 3     2 y     2
#> 4     3 x     1
#> 5     3 y     2
#> 6     3 z     3
#> 7     4 NA    1
  • 1 respostas
  • 39 Views
Martin Hope
Harry Northover
Asked: 2025-04-07 22:50:02 +0800 CST

Exibindo caixas de cores ao lado dos nomes das classes TailwindCSS indicando a cor, em qualquer lugar, como nos atributos class ou className

  • 5

É possível exibir caixas de cores antes de qualquer nome de classe TailwindCSS relacionado a cores, independentemente de onde eu escreva o nome da classe TailwindCSS?

Notei que isso funciona perfeitamente em arquivos CSS ou dentro do HTML classou classNameatributos (por exemplo, border-error-400na segunda foto).

Eu imagino que isso deva funcionar em todo o código, mas fiquei decepcionado ao descobrir que, como mostrado na captura de tela anexa, a caixa indicadora de cor não aparece quando uma classe de cor TailwindCSS é escrita como o valor de um objeto JS.

Não funciona em lugar nenhum Trabalhando em className="..."atributo
não está funcionando aqui trabalhando aqui
visual-studio-code
  • 2 respostas
  • 43 Views
Martin Hope
Cheok Yan Cheng
Asked: 2025-04-07 22:47:38 +0800 CST

Comportamento inesperado do ViewThatFits: por que meu ScrollView não está renderizando para conteúdo grande no SwiftUI

  • 5

Quero exibir meu conteúdo como está, centralizado verticalmente, se ele couber na altura da tela.

Só quero envolvê-lo ScrollViewse sua altura exceder a altura da tela.

Estou evitando colocá-lo em um ScrollViewpor padrão, porque conseguir centralização vertical dentro de um ScrollViewpode ser complicado.

Eu tento usar ViewThatFitscom ScrollView.

Eu uso o seguinte código para mostrar conteúdo de altura pequena.


Nenhum ScrollView é renderizado (comportamento correto)

import SwiftUI

struct ContentView: View {
    var largeContent: some View {
        VStack {
            Spacer()
            
            ForEach(1...20, id: \.self) { i in
                Image(systemName: "globe")
                    .imageScale(.large)
                    .foregroundStyle(.tint)
                Text("\(i). Large content!")
                    .font(.largeTitle)
            }
            
            Spacer()
        }
    }
    
    var smallContent: some View {
        VStack {
            Spacer()
            
            ForEach(1...2, id: \.self) { i in
                Image(systemName: "globe")
                    .imageScale(.large)
                    .foregroundStyle(.tint)
                Text("\(i). Small content!")
                    .font(.largeTitle)
            }
            
            Spacer()
        }
    }
    
    var body: some View {
        VStack {
            let smallContent = smallContent
            
            // The top portion dedicated to content
            GeometryReader { x in
                ViewThatFits {
                    // Option 1: Content fits without scrolling.
                    smallContent
                        .background(Color.yellow)
                        .frame(maxHeight: x.size.height)
                        .frame(maxWidth: .infinity)
                    
                    // Option 2: Content is too tall, so wrap it in a ScrollView.
                    ScrollView {
                        smallContent
                            .background(Color.red)
                            .frame(minHeight: x.size.height)
                            .frame(maxWidth: .infinity)
                    }
                }
            }
            
            Text("Button")
                .background(Color.blue)
                .font(.largeTitle)
        }
    }
}

insira a descrição da imagem aqui

Está dentro da minha expectativa porque

  1. Não ScrollViewé renderizado.
  2. O conteúdo é centralizado verticalmente.

Nenhum ScrollView é renderizado (comportamento errado)

import SwiftUI

struct ContentView: View {
    var largeContent: some View {
        VStack {
            Spacer()
            
            ForEach(1...20, id: \.self) { i in
                Image(systemName: "globe")
                    .imageScale(.large)
                    .foregroundStyle(.tint)
                Text("\(i). Large content!")
                    .font(.largeTitle)
            }
            
            Spacer()
        }
    }
    
    var smallContent: some View {
        VStack {
            Spacer()
            
            ForEach(1...2, id: \.self) { i in
                Image(systemName: "globe")
                    .imageScale(.large)
                    .foregroundStyle(.tint)
                Text("\(i). Small content!")
                    .font(.largeTitle)
            }
            
            Spacer()
        }
    }
    
    var body: some View {
        VStack {
            let largeContent = largeContent
            
            // The top portion dedicated to content
            GeometryReader { x in
                ViewThatFits {
                    // Option 1: Content fits without scrolling.
                    largeContent
                        .background(Color.yellow)
                        .frame(maxHeight: x.size.height)
                        .frame(maxWidth: .infinity)
                    
                    // Option 2: Content is too tall, so wrap it in a ScrollView.
                    ScrollView {
                        largeContent
                            .background(Color.red)
                            .frame(minHeight: x.size.height)
                            .frame(maxWidth: .infinity)
                    }
                }
            }
            
            Text("Button")
                .background(Color.blue)
                .font(.largeTitle)
        }
    }
}

#Preview {
    ContentView()
}

insira a descrição da imagem aqui

Agora, alterei para exibir "conteúdo grande". Esperava que a cor vermelha ScrollView fosse renderizada. No entanto, não foi.

Posso saber o que há de errado com meu código? Obrigado.

  • 1 respostas
  • 37 Views
Martin Hope
spinjector
Asked: 2025-04-07 22:32:18 +0800 CST

Como posso determinar a área utilizável de um formulário de usuário do Excel VBA para que eu possa redimensioná-lo para ajustar os controles?

  • 5

Se eu criar um formulário de usuário do Excel VBA que gere dinamicamente um número variável de controles, como posso determinar a área utilizável do formulário para redimensioná-lo para ajustar os controles?

Uma captura de tela está anexada abaixo, seguida por um exemplo de código, mas as últimas linhas de código não funcionam.

Consigo escrever meu próprio código de dimensionamento automático para UserForm_Initialize(), mas isso não é possível se eu não encontrar a largura e a altura utilizáveis ​​do formulário. Sempre há uma discrepância, que sem dúvida inclui os tamanhos das bordas, sombras, barra de título, etc.

Eu entendo que o VBA é desorganizado com várias escalas de medição, como pixels, twips, polegadas, etc. Então seria útil se alguma resposta especificasse a escala que está sendo usada, para que eu possa chamar as funções de conversão corretas.

Encontrei esta postagem sobre os sistemas de coordenadas do VBA, que ajuda, mas não responde à minha pergunta: https://www.reddit.com/r/vba/comments/1arzvx8/coordinate_systems_in_vba_userform_controls/

insira a descrição da imagem aqui

Private Sub UserForm_Initialize()
    
    Dim ctls        As MSForms.Controls
    Dim ctl         As MSForms.Control
    Dim coll        As VBA.Collection
    Dim ctlCount    As Integer
    Dim colCount    As Integer
    Dim x           As Single
    Dim y           As Single
    Dim w           As Single
    Dim h           As Single
    Dim i           As Integer
    
    'Settings.
    colCount = 5
    w = 24
    h = 24
    
    'Get the objects.
    Set ctls = Me.Controls
    Set coll = New VBA.Collection
    
    'Add the buttons to a collection.
    ctlCount = ctls.Count
    For i = 0 To ctlCount - 1
        For Each ctl In ctls
            If ctl.TabIndex = i Then
                coll.Add ctl
            End If
        Next
    Next
    
    'Align the buttons.
    i = 0
    Do
        If i < ctlCount Then
            y = y + 1
            Do
                x = x + 1
                If x <= colCount Then
                    i = i + 1
                    Set ctl = coll.Item(i)
                    ctl.Left = (x - 1) * w
                    ctl.Top = (y - 1) * h
                    ctl.Width = 24
                    ctl.Height = 24
                Else
                    Exit Do
                End If
            Loop
            x = 0
        Else
            Exit Do
        End If
    Loop
    
    'Adjust the form size.
    Me.Width = (x + 1) * w      '### This does not work. ###
    Me.Height = (y + 1) * h     '### This does not work. ###
    
End Sub
excel
  • 2 respostas
  • 55 Views
Martin Hope
jamesfm
Asked: 2025-04-07 22:25:43 +0800 CST

Problema com o mesmo domínio personalizado com certificado gerenciado pelo Azure em um serviço de aplicativo e um ponto de extremidade do Front Door?

  • 5

Tenho um serviço de aplicativo com um domínio personalizado e um certificado gerenciado do Azure, que funciona bem há anos. Recentemente, adicionei um perfil do Front Door e, claro, adicionei o mesmo domínio personalizado a ele, com um certificado criado pelo Azure Front Door.

Nesse processo, os registros DNS do domínio foram atualizados para que o registro A agora seja um ALIAS para o recurso AFD, e o CNAME para www aponte para o ponto de extremidade do AFD.

Entretanto, recentemente o Azure relatou este erro no serviço de aplicativo:

Auto-Renewal Failed... for Apex domain we must have the A record mapped to the 
webapp IP. For subdomain, we must have CNAME mapped to the webapp name.

Isso parece implicar que, uma vez implantado o Front Door, o aplicativo web em si não poderá mais ter um domínio personalizado. Mas há um conselho da Microsoft online de que você deve "preservar o nome do host HTTP original entre um proxy reverso e seu aplicativo web de back-end".

A MS também afirma que

Para conexões HTTPS, o Azure Front Door espera que sua origem apresente um certificado de uma autoridade de certificação (CA) válida com um nome de assunto correspondente ao nome do host de origem.

Então estou confuso sobre como fazer isso. (Talvez eu tenha entendido errado.)

Posso ter um domínio personalizado com um certificado gerenciado do Azure no AFD e no serviço de aplicativo? Caso contrário, como posso seguir as práticas recomendadas para garantir que o nome do host HTTP original solicitado pelo usuário também corresponda ao nome do host do serviço de aplicativo?

  • 1 respostas
  • 37 Views
Martin Hope
jo_
Asked: 2025-04-07 22:22:41 +0800 CST

Criando novas linhas em um dataframe com base em valores anteriores

  • 6

Tenho um dataframe parecido com este:

test = pd.DataFrame(
    {'onset': [1,3,18,33,35,50],
     'duration': [2,15,15,2,15,15],
     'type': ['Instr', 'Remember', 'SocTestString', 'Rating', 'SelfTestString', 'XXX']
    }
)

Quero criar um novo dataframe de forma que quando typecontiver "TestString",

  • duas novas linhas são criadas abaixo dessa linha, de modo que a linha agora seja dividida em três linhas com (por exemplo) SocTestString_1, SocTestString_2, SocTestString_3
  • para essas três linhas, altere as colunas de duração para o valor 5
  • para essas três linhas, altere também a coluna de início de modo que seja o valor de início da coluna anterior + 5

O dataframe final deve ficar assim:

test_final = pd.DataFrame(
    {'onset': [1,3,18,23,28,33,35,40,45,50],
     'duration': [2,15,5,5,5,2,5,5,5,15],
     'type': ['Instr', 'Remember', 'SocTestString_1', 'SocTestString_2', 'SocTestString_3', 'Rating', 'SelfTestString_1', 'SelfTestString_2', 'SelfTestString_3', 'XXX']
    })

Como posso fazer isso?

python
  • 1 respostas
  • 58 Views
Martin Hope
Kiran
Asked: 2025-04-07 22:15:15 +0800 CST

Como combinar respostas usando merge() e from() do RxJS

  • 6

Preciso fazer nchamadas http (definidas pelo usuário). As URLs são geradas programaticamente a partir das entradas do usuário. Cada mês deve ser consultado separadamente, dependendo ndo intervalo de datas selecionado pelo usuário. No exemplo abaixo, desejo consultar 1 ano de dados, então o conjunto de URLs ficaria assim:

[
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202301&sql=SELECT * from `EPD_202301` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202302&sql=SELECT * from `EPD_202302` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202303&sql=SELECT * from `EPD_202303` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202304&sql=SELECT * from `EPD_202304` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202305&sql=SELECT * from `EPD_202305` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202306&sql=SELECT * from `EPD_202306` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202307&sql=SELECT * from `EPD_202307` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202308&sql=SELECT * from `EPD_202308` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202309&sql=SELECT * from `EPD_202309` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202310&sql=SELECT * from `EPD_202310` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202311&sql=SELECT * from `EPD_202311` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5",
    "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202312&sql=SELECT * from `EPD_202312` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5"
]

Gostaria que os resultados fossem combinados em uma matriz de dados. Gostaria que cada resposta fosse preenchida na matriz assim que chegasse.

Fiz um curso de RxJS para iniciantes e descobri que ele merge()é o mais adequado para isso. No entanto, o curso diz para fazer o seguinte:

import { merge } from 'rxjs';
import { ajax } from 'rxjs/ajax';

const url1 = "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202301&sql=SELECT * from `EPD_202301` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5";
const url2 = "https://opendata.nhsbsa.net/api/3/action/datastore_search?resource_id=EPD_202302&sql=SELECT * from `EPD_202302` WHERE BNF_CODE = '0410030C0AAAFAF' AND PRACTICE_CODE = 'Y03641' LIMIT 5";

const arr = [];
const observer = {
    next: (x) => arr.push(x),
    complete: () => console.log(arr),
}

const merged$ = merge(
    ajax.getJSON(url1),
    ajax.getJSON(url2),
);

merged$.subscribe(observer);

Isso atende às minhas necessidades, mas não posso especificar explicitamente cada URL. Não sei quantas serão, então elas são armazenadas em uma matriz.

Então descobri que isso from()poderia ajudar:

from(urls).pipe(
    merge((url: any) => this.getDatastoreSearchMonthly(url))
);

Entretanto, estou recebendo um erro de TypeScript:

Argument of type 'Observable<unknown>' is not assignable to parameter of type 'OperatorFunction<string, DatastoreSearch[]>'.
  Type 'Observable<unknown>' provides no match for the signature '(source: Observable<string>): Observable<DatastoreSearch[]>'.ts(2345)
No overload matches this call.
  The last overload gave the following error.
    Argument of type '(url: string) => Observable<unknown>' is not assignable to parameter of type 'number | ObservableInput<unknown> | SchedulerLike'.ts(2769)
nhs-api.service.ts(76, 19): Did you mean to call this expression?
merge.d.ts(8, 25): The last overload is declared here.

Meu serviço completo:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { from, map, merge, Observable } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { DatastoreSearch, DatastoreSearchSql } from 'src/app/types/nhs-api/epd';
import * as moment from 'moment';

const baseUrl = 'https://opendata.nhsbsa.net/api/3/action/datastore_search';
type Options = {
    startDate: moment.Moment,
    endDate: moment.Moment,
    practiceCode: string,
    bnfCode: string,
}

@Injectable({
    providedIn: 'root'
})
export class NhsApiService {

    constructor(private http: HttpClient) { }

    public getDatastoreSearch(options: string): Observable<DatastoreSearch> {
        const url = `${baseUrl}?${options}`;
        return this.http.get<DatastoreSearch>(url);
    }

    public getDatastoreSearchSql(resourceId: string, sql: string): Observable<DatastoreSearchSql> {
        const url = `${baseUrl}?resource_id=${resourceId}&sql=${sql}`;
        return this.http.get<DatastoreSearchSql>(url);
    }

    private getDatastoreSearchMonthly(url: string): Observable<DatastoreSearch> {
        return this.http.get<DatastoreSearch>(url);
    }

    private getUrls(options: Options): string[] {
        // Ensure first day of month is selected
        const startDate = options.startDate.startOf('month');
        const endDate = options.endDate.startOf('month');

        const urls = [];

        const includeSearchTerm = (key: string, field: string) => options[key] ? `${field} = '${options[key]}' AND ` : '';
        const removeJoiningTerm = (sql: string, term: string) => sql.endsWith(term) ? sql.substring(0, sql.length - term.length).trim() : sql;

        const getSql = (resourceId: string): string => {
            const tableName = '`' + resourceId + '`';
            let sql = `SELECT * from ${tableName} WHERE `;
            sql += includeSearchTerm('bnfCode', 'BNF_CODE');
            sql += includeSearchTerm('practiceCode', 'PRACTICE_CODE');
            sql = sql.trim();
            sql = removeJoiningTerm(sql, 'AND');
            sql = removeJoiningTerm(sql, 'WHERE');
            sql = `${sql} LIMIT 5`
            return sql;
        }

        for (const m = startDate; m.isSameOrBefore(endDate); m.add(1, 'month')) {
            const dt = m.format('YYYYMM');
            const resourceId = `EPD_${dt}`;
            const sql = getSql(resourceId);
            const url = `${baseUrl}?resource_id=${resourceId}&sql=${sql}`;
            urls.push(url);
        }

        console.log(urls);

        return urls;
    }

    public getMonthlyData(options: Options): Observable<DatastoreSearch[]> {
        const urls = this.getUrls(options);

        return from(urls).pipe(
            merge((url: string) => ajax.getJSON(url))
        );
    }
}

E o componente que o chama:

import { Component, OnInit, signal } from '@angular/core';
import { MomentDateAdapter } from '@angular/material-moment-adapter';
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
import { FormGroup, NonNullableFormBuilder } from '@angular/forms';
import { MONTH_YEAR_FORMATS } from 'src/app/config/dates';
import { DatastoreSearch } from 'src/app/types/nhs-api/epd';
import { Observable } from 'rxjs';
import { NhsApiService } from 'src/app/services/nhs-api/nhs-api.service';
import * as moment from 'moment';

@Component({
    selector: 'app-nhs-api-scratch',
    templateUrl: './scratch.component.html',
    styleUrls: ['./scratch.component.scss'],
    providers: [
        { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
        { provide: MAT_DATE_FORMATS, useValue: MONTH_YEAR_FORMATS },
    ],
})
export class ScratchComponent implements OnInit {

    public form!: FormGroup;

    public data$: Observable<DatastoreSearch[]> = new Observable();

    readonly panelOpenState = signal(false);

    constructor(
        private fb: NonNullableFormBuilder,
        private readonly service: NhsApiService,
    ) { }

    public ngOnInit(): void {
        this.form = this.fb.group({
            practiceCode: this.fb.control('Y03641'),
            bnfCode: this.fb.control('0410030C0AAAFAF'),
            startDate: this.fb.control(moment('2023-01-01')),
            endDate: this.fb.control(moment('2023-12-01')),
        });
    }

    public onSubmit() {
        this.data$ = this.service.getMonthlyData(this.form.value);
    }
}

angular
  • 2 respostas
  • 45 Views
Martin Hope
Rabbitx
Asked: 2025-04-07 21:58:58 +0800 CST

Como funciona a inicialização de lista entre colchetes "class({args...})"?

  • 6

Tão confuso com a inicialização da lista cpp e a divergência do compilador.

Isso aconteceu enquanto eu estava revisando alguns recursos do cpp.

U ({ arg1, arg2, ... }) (11)

cppreference #copy-list-initialization case 11 diz

expressão de conversão funcional ou outras invocações de construtor, onde uma lista de inicializadores entre chaves é usada no lugar de um argumento do construtor. A inicialização da lista de cópias inicializa o parâmetro do construtor (observe que o tipo U neste exemplo não é o tipo que está sendo inicializado por lista; U's constructor's parameteré)

Então tentei o seguinte código para ver qual construtor o compilador Cpp escolherá:

#include <string>
#include <vector>
#include <map>
#include <tuple>
#include <iostream>
using namespace std;
struct A {
    static int id;
    A(int integer, float sci, string str, vector<int> vnum, pair<int, int> intP, tuple<int, string, float> isfTuple) {
    }
    A(pair<int, float> ifP) { // this also allows {} for default construction
    }
    A(const A &) = delete;
    A(A &&) = delete;
    ~A() {
        cout << "Destructed: " << ++id << endl;
    }
};

int main(){
    A b({1, 1, "str", {1, 2}, {1, 1}, {1, "str", 1}}); // works on MinGW
    // MinGW version: x86_64-14.2.0-release-win32-seh-ucrt-rt_v12-rev2
    // MSVC error: 'A::A(A &&)': attempting to reference a deleted function


    A partial({1, 1.0}); // works both on MinGW and MSVC with ISO C++20 Standard (/std:c++20)
}

No caso em questão A b(...), fiquei confuso sobre o motivo pelo qual o compilador funciona mesmo com o construtor de cópia A(const A &) = delete;e o construtor de movimento A(A&&)excluídos. Então, pesquisei sobre a conversão de construtores , a elisão de cópia e o rascunho de CPP em inicializadores, mas fiquei ainda mais confuso. Tentei compilar com MSVC e obtive o erro:

'A::A(A &&)': tentando referenciar uma função excluída

Então o Compiler Explorer obteve sucesso.

Então, o que está acontecendo? Bug no compilador MinGW ou MSVC? Ou este é um comportamento indefinido (mas o caso 11 parece estar bem definido)? Por que o MinGW e o Compiler Explorer tiveram sucesso?

Meus scripts de construção do GCC (usando vscode tasks.json):

g++ -Wall --std=gnu++20 -g ${file} -o ${fileDirname}\\${fileBasenameNoExtension}

Plataforma: Windows 11, é claro.

Conjunto de ferramentas do Visual Studio:Visual Studio 2022 (v143)

Padrão de linguagem do Visual Studio:ISO C++20 Standard (/std:c++20)

Resultado do Compiler Explorer


Editar:

Meus testes posteriores mostram que tanto o MSVC quanto o MinGW usam os mesmos construtores para cada caso se nenhum construtor for removido -- Result . O resultado do stdio permanece o mesmo. Há apenas uma divergência no comportamento de verificação do compilador (não sei qual é realmente) e o resultado da compilação é o mesmo, novamente, se nenhum construtor for removido. E sob -std=gnu++11, onde a eliminação de cópia não está disponível até o C++17, tanto o MSVC quanto o MinGW mantêm a mesma saída -- nenhum construtor de cópia/movimentação foi usado.

Então A b..., na verdade, o caso de uso 1 é uma sintaxe de inicialização direta, em vez do caso 11, o que faz a sintaxe do caso 1 entrar em conflito com o caso de teste, A b...ou ele está, na verdade, usando outra coisa?


Editar:

Parece que a elisão de cópia sempre acontece desde o C++ 11 durante a inicialização, mas algumas divergências acontecem no processamento de pré-valor na atribuição e na expressão de retorno entre compiladores. Acredito que a melhor prática é evitar aproveitar as vantagens mínimas do efeito colateral dos construtores.


Editar:

Acho que @Jarod42 está certo.

c++
  • 2 respostas
  • 122 Views
Martin Hope
oemer ok
Asked: 2025-04-07 21:58:39 +0800 CST

Por que minha data de entrada verificada não está selecionada?

  • 6

Tenho uma condição em que desejo obter resultados entre duas datas:

start_time: 2025-01-02
end_time: 2025-04-27

O problema é que não recebo o resultado 2025-04-27 , recebo 2025-04-26 , então termina um dia antes. Também quero obter o horário 2025-04-27.

O que estou fazendo errado?

SELECT  l.id AS aslocation_id
      , l.name
      , lo.id
      , lo.start_time
      , lo.end_time
      , lo.leader_id
      , lo.is_storno
      , lo.storno_at
      , lo.storno_by
      , lo.employees_need
      , lo.created_at
FROM location_orders AS lo
JOIN location AS l ON l.id = lo.location_id
WHERE lo.tenant_id = 321 
  AND lo.deleted_by IS NULL 
  AND lo.start_time >= '2025-01-02' 
  AND lo.end_time <= '2025-04-27'
ORDER BY lo.start_time DESC
       , lo.id DESC
LIMIT 50;
sql
  • 3 respostas
  • 73 Views
Prev
Próximo

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