Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consulta closure funcion list_find de las commons #2972

Closed
pablomartinfranco opened this issue May 22, 2023 · 2 comments
Closed

Consulta closure funcion list_find de las commons #2972

pablomartinfranco opened this issue May 22, 2023 · 2 comments

Comments

@pablomartinfranco
Copy link

pablomartinfranco commented May 22, 2023

Hola,
en la funcion de las commons list_find

void* list_find(t_list *self, bool(*condition)(void*)) {
	t_link_element **indirect = list_get_indirect_by_condition(self, condition);
	return (*indirect) != NULL ? (*indirect)->data : NULL;
}

cual seria la forma correcta de capturar un valor desde fuera de un closure y devolver el puntero a la funcion que evalua la condicion contra ese valor capturado ?

quiero buscar un elemento en una lista matcheando por uno de los elementos introduciendo el target value desde fuera de la funcion condicion.

estoy intentando hacer un closure que recibe un valor y devuelva el puntero a la funcion condicion.

PD: estoy tratando de hacerlo sin la extension de nested functions.

Edit: creo que pude hacerlo pero reimplementando la funcion para que reciba el contexto.

// Asi quedaria la firma agregando el contexto
void* list_find(t_list *self, bool(*fn)(void *elem, void *ctx), void *ctx);

Gracias
Saludos

@RaniAgus
Copy link
Contributor

¡Buenas! En estos casos les recomiendo intentar no reinventar la rueda y pasarle una nested function a list_find(). La idea de usar las commons es que no se queden atascados en buscar cómo implementar listas enlazadas y puedan enfocarse en los requerimientos del TP.

Si la razón es que el VSCode les colorea con rojo al no ser una feature de C estándar (microsoft/vscode-cpptools#1035), pueden hacer 2 cosas:

  1. Desactivar el intellisense agregando esta línea a su config del workspace:
{
	"settings": {
		"C_Cpp.errorSquiggles": "disabled", 
	},
}
  1. No hacer nada, solo ignorarlo. Los verdaderos warnings y errores son los que arroja el compilador, si el IDE les marca algo, eso no es ningún impedimento para que se ejecute gcc para compilar.

Saludos

@pablomartinfranco
Copy link
Author

Ok
Saludos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants