¿Por qué usamos [Symbol.iterator] en lugar de un bucle 'para`? -- javascript campo con iterator campo con symbols camp Relacionados El problema

Why do we use [Symbol.iterator] instead of a `for` loop?


2
vote

problema

Español

Estoy leyendo la sección "The Iterator Interface" de Elequent Javascript y tengo problemas para entender por qué Necesidad de definir MatrixIterator FUNCIÓN PARA ITERATERAR Matrix 'S Contenido. Por lo general, uso for dentro de otro for para iterar el contenido de una matriz bidimensional, similar a Este . ¿Es porque el [Symbol.iterator] de cada objeto en JS se usa cada vez que llama a la taquigrafía de for8 bucle que es for...of ?

Además, soy correcto suponer que el estándar #menu { position:relative; float:right; margin:2px; margin-right:13%; width:52%; height:77px; } #menu_table{ position:relative; top:12%; height:76%; width:100%; border-spacing:0px; } .menu_item:first-child{ border-left:1px solid #40d7bc; } .menu_item:hover{ background-color: black; color:#40d7bc; } .menu_item{ border-right:1px solid #40d7bc; text-align:center; } ul.dropdown li ul { display:none; position:absolute; z-index:100; padding-left:50%; top:35px; width:100%; } ul.dropdown li ul li { position:relative; border-top:30px solid black; left:-50%; background-color: black; } ul.dropdown li ul li:last-child { border-bottom:15px solid black; } .menu_item li { list-style-type: none; } 0 no puede iterar automáticamente un objetos bidimensionales y, por lo tanto, la necesidad de crear #menu { position:relative; float:right; margin:2px; margin-right:13%; width:52%; height:77px; } #menu_table{ position:relative; top:12%; height:76%; width:100%; border-spacing:0px; } .menu_item:first-child{ border-left:1px solid #40d7bc; } .menu_item:hover{ background-color: black; color:#40d7bc; } .menu_item{ border-right:1px solid #40d7bc; text-align:center; } ul.dropdown li ul { display:none; position:absolute; z-index:100; padding-left:50%; top:35px; width:100%; } ul.dropdown li ul li { position:relative; border-top:30px solid black; left:-50%; background-color: black; } ul.dropdown li ul li:last-child { border-bottom:15px solid black; } .menu_item li { list-style-type: none; } 1111 y asignándolo como: < / p>

  #menu   {     position:relative;     float:right;     margin:2px;     margin-right:13%;     width:52%;     height:77px;     } #menu_table{     position:relative;     top:12%;     height:76%;     width:100%;     border-spacing:0px;     } .menu_item:first-child{     border-left:1px solid #40d7bc;     } .menu_item:hover{     background-color: black;     color:#40d7bc;     } .menu_item{     border-right:1px solid #40d7bc;     text-align:center;     } ul.dropdown li ul {      display:none;     position:absolute;     z-index:100;     padding-left:50%;     top:35px;     width:100%;     } ul.dropdown li ul li {     position:relative;     border-top:30px solid black;     left:-50%;     background-color: black;     } ul.dropdown li ul li:last-child {     border-bottom:15px solid black;     } .menu_item li {     list-style-type: none;     } 2 

¿Podemos hacer esto en su lugar: #menu { position:relative; float:right; margin:2px; margin-right:13%; width:52%; height:77px; } #menu_table{ position:relative; top:12%; height:76%; width:100%; border-spacing:0px; } .menu_item:first-child{ border-left:1px solid #40d7bc; } .menu_item:hover{ background-color: black; color:#40d7bc; } .menu_item{ border-right:1px solid #40d7bc; text-align:center; } ul.dropdown li ul { display:none; position:absolute; z-index:100; padding-left:50%; top:35px; width:100%; } ul.dropdown li ul li { position:relative; border-top:30px solid black; left:-50%; background-color: black; } ul.dropdown li ul li:last-child { border-bottom:15px solid black; } .menu_item li { list-style-type: none; } 3 ?

Off-Topic: Siento que debería saber otras cosas más profundas, ya que me siento bastante confundido sobre estos conceptos. ¿Podría alguien también elaborar qué significa la interfaz? El libro lo mencionó como:

Diferentes piezas de dicho programa de este tipo interactúan entre sí a través de interfaces, conjuntos limitados de funciones o enlaces que proporcionan una funcionalidad útil en un nivel más abstracto, ocultando su implementación precisa.

y

La interfaz de separación de la implementación es una gran idea. Generalmente se llama encapsulación.

Pero no mencionó qué es la implementación.

Original en ingles

I'm reading Eloquent JavaScript's "The Iterator Interface" section and I have trouble understanding why we need to define MatrixIterator function to iterate Matrix's contents. I usually use for inside of another for to iterate the contents of a two-dimensional matrix, similar to this. Is it because the [Symbol.iterator]'s of each object in JS is used whenever you call the shorthand of for loop which is for...of?

Furthermore, am I correct to assume that the standard [Symbol.iterator] cannot automatically iterate a two-dimensional objects and thus, the need to create MatrixIterator and assigning it as:

Matrix.prototype[Symbol.iterator] = function() {   return new MatrixIterator(this); }; 

Are we allowed to do this instead: Matrix.prototype[Symbol.iterator] = MatrixIterator;?

Off-topic: I feel like I should know some other things more in-depth as I feel rather confused about these concepts. Could someone also elaborate what interface means? The book did mention it as:

Different pieces of such a program interact with each other through interfaces, limited sets of functions or bindings that provide useful functionality at a more abstract level, hiding their precise implementation.

and

Separating interface from implementation is a great idea. It is usually called encapsulation.

but it did not mention what implementation is.

        
     
     

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

LOS CORTE DE for BOOP QUE ES for...of ?

No, 9988777667 no es una taquigrafía para un bucle normal for...of8 . Es un mecanismo completamente separado.

¿Por qué necesitamos definir MatrixIterator FUNCIÓN PARA IRREWER statsmodels.tsa.filters._utils0 'S CONTENIDO?. ¿Es porque el statsmodels.tsa.filters._utils1111 de cada objeto en JS se usa cada vez que usa statsmodels.tsa.filters._utils2 ?

si. Definimos el statsmodels.tsa.filters._utils3 , ya que se ajusta a la interfaz del iterador, como se espera que se devuelva un método for...of1414 para ser utilizable en tal bucle.

Por supuesto, hay formas alternativas de lograr esto, no necesariamente necesarias hacer una clase adicional for...of15 . Una función del generador suele ser la más fácil.

Por lo general, uso statsmodels.tsa.filters._utils6 dentro de otro statsmodels.tsa.filters._utils7 para iterar el contenido de una matriz bidimensional

Claro, pero eso es bastante cierto sintáctico: dos bucles, dos contadores, doble sangría. Podría ser mucho más simple, y no queremos repetir este patrón en todas partes cuando queremos iterar una matriz. La interfaz iterable permite esto.

AM I CORRECTO PARA SUSTMIBER QUE EL ESTÁNDAR statsmodels.tsa.filters._utils8 no puede iterar automáticamente un objetos bidimensionales

No hay un método estándar statsmodels.tsa.filters._utils9 . Cada tipo necesita definirlo. statsmodels.tsa.seasonal.STL0 hace, por ejemplo, pero funciona solo en matrices que no están en nuestra clase for...of21 .

¿Podemos hacer esto en su lugar: statsmodels.tsa.seasonal.STL2 ?

que no funciona, ya que statsmodels.tsa.seasonal.STL3 a) es un constructor que debe invocarse con for...of24 b) toma la instancia de la matriz que debe iterar como un argumento

 

the shorthand of for loop which is for...of?

No, for xe2x80xa6 of is not a shorthand for a normal for (xe2x80xa6; xe2x80xa6; xe2x80xa6) loop. It's a completely separate mechanism.

Why do we need to define MatrixIterator function to iterate Matrix's contents?. Is it because the [Symbol.iterator]'s of each object in JS is used whenever you use for...of?

Yes. We define the MatrixIterator as it conforms to the iterator interface, as is expected to be returned by a Symbol.iterator method to be usable in such a loop.

Of course there are alternative ways to achieve this, we don't necessarily need to make an extra MatrixIterator class. A generator function is usually the easiest.

I usually use for inside of another for to iterate the contents of a two-dimensional matrix

Sure, but that's quite some syntactic overhead - two loops, two counters, double indentation. It could be much simpler, and we don't want to repeat this pattern everywhere when we want to iterate a matrix. The iterable interface allows this.

am I correct to assume that the standard [Symbol.iterator] cannot automatically iterate a two-dimensional objects

There is no standard Symbol.iterator method. Every type needs to define it itself. Array.prototype does, for example, but it works only on arrays not on our Matrix class.

Are we allowed to do this instead: Matrix.prototype[Symbol.iterator] = MatrixIterator;?

That doesn't work, as MatrixIterator a) is a constructor that needs to be invoked with new b) takes the matrix instance that it should iterate as an argument

 
 
   
   

Relacionados problema

15  ¿Cuál es la diferencia entre un símbolo y una variable en Ruby? [duplicar]  ( What is the difference between a symbol and a variable in ruby ) 
Esta pregunta ya tiene respuestas aquí : Cómo entender los símbolos en Ruby ...

3  Símbolo equivocado  ( Ld wrong symbol ) 
Soy la aplicación Buildnig con Boost.Python Library. Quiero vincularlo. Aquí está el código: #include <boost/python.hpp> using namespace boost::python; //...

3  Pase el símbolo como argumentos  ( Pass symbol as arguments ) 
Tengo un método ya definido y de trabajo como, render_format(doc,host,table_info) Tuve este método llamado en algún lugar donde pasé los argumentos com...

0  Extensión KRB5, 2 símbolos duplicados, CLANG: ERROR: El comando del enlace falló con el código de salida 1  ( Krb5 extension 2 duplicate symbols clang error linker command failed with ex ) 
Estoy tratando de instalar una extensión PHP para las autentistas de Kerebos ( https://pecl.php.net/ Paquete / KRB5 ), en mi OSX, he descargado la extensión y...

0  Conflicto entre la Biblioteca Occi de LiBLDAP y OCCI de Oracle  ( Conflict between openldaps libldap and oracles occi library ) 
Estoy escribiendo una pequeña herramienta para hacer algunos cheques en los datos de una base de datos Oracle y en LDAP. Pensando en el rendimiento. He decidi...

50  ¿Cuáles son los significados de las columnas de la tabla de símbolos mostrada por Readely?  ( What are the meanings of the columns of the symbol table displayed by readelf ) 
¿Podría alguien explicar las columnas que se muestran de la tabla de símbolos usando # ... Scanning dependencies of target tf_tutorials_example_trainer [100%...

8  ¿Cómo deprimo en un conjunto ilmerizado?  ( How do i debug into an ilmerged assembly ) 
Summary Quiero alterar el proceso de compilación de una solución de 2-ensamblaje, de modo que se invoque una llamada a Ilmerge, y la construcción se tradu...

2  XMPP Client Library Gloox - El enlazador no puede encontrar símbolo  ( Xmpp client library gloox linker cannot find symbol ) 
Estoy totalmente perplejo con este problema y realmente no puedo imaginar cómo resolver este problema. Básicamente, compilé la la biblioteca Gloox en Visu...

1  QT: símbolo externo no resuelto al intentar obtener el código fuente de la página web  ( Qt unresolved external symbol while trying to get webpage source code ) 
Comencé a desarrollar con QT y estoy tratando de obtener el código fuente de la página web. Esto es lo que tengo: mainwindow.cpp #include "mainwindow.h" ...

2  & # 212 ¿Se muestra como un símbolo de marca registrado en Firefox?  ( 212 shows up as a trademark symbol in firefox ) 
<span style="font-family:Symbol; font-size:10pt; color:#000000">&#212;</span><span style="font-family:MS Sans Serif; font-size:10pt; color:#000000"> ANTE...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos