Comments (3)
But in Kuroko I can use let
to declare a local variable inside of for loop - which is great ;-)
from kuroko.
This capturing behavior is a tricky one. The scope of the implicitly declared loop variable is the loop as a whole, rather than an individual iteration of the body, so while the variable's scope does not extend after the loop as it would with the function scoping in Python, it does still exhibit the same capturing behavior where each iteration sees the same final variable rather than unique instances.
The reason for this specific scoping decision is that it more closely matches for
-loop declarations in languages like C99 (which Kuroko's scoping rules are generally modeled on), and in fact Kuroko has 'legacy' support for C-style for
loops in addition to the for ... in ...
loops, which demonstrates the mapping pretty well:
for i=0; i<10; i++:
print(i)
(Those might go away at some point, though, so please don't use them - I don't think they're any faster than in range(...)
anyway...)
As you note, because we can force a new local in the body, we can provide different captured variables to the lambda in each iteration by forcing an extra assignment - a bit ugly, but quite useful! There's an instance of this in the documentation generator - instead of unpacking in the for
, the unpack is done in the body to ensure separately-captured locals in lambdas.
Meshing Python's syntax with block scoping has been a challenge, and Kuroko definitely has some unfortunate quirks like this because of it, but sometimes those quirks have hidden benefits.
from kuroko.
Thank you very much.
from kuroko.
Related Issues (20)
- Support step values in slices HOT 1
- Add support for `async for`, `async with` HOT 6
- Kuroko does not read files with Windows \r\n newlines HOT 2
- Type annotations have no effect HOT 2
- math functions log1p and expm1 HOT 1
- Found a possible security concern HOT 3
- Can colourisation be disabled? HOT 2
- print won't print without an argument HOT 5
- `dict` argument compatibility with Python HOT 2
- keyword arguments can't default to themselves HOT 4
- Compile to native code? HOT 2
- Globals should be bound to `function`s, not `codeobject`s HOT 1
- Kuroko 1.3
- missing gamma function when built against musl HOT 4
- dangling pointers to VM stack HOT 4
- [Question] Class field declaration? HOT 2
- [Termux] TypeError: __init__() expects list, not 'list' HOT 14
- [KEP] Allow using `let` to define local variable in "legacy `for` loop" like Javascript HOT 2
- Externalize core modules HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kuroko.