Comments (2)
This is not exacty #7975. The variable is not declared within the macro. It's only used there.
But it seems to be a similar issue. The compiler determines whether a block argument is a caputered block depending on whether the variable is referenced in the method body. Apparently it cannot recognise it when inside a macro.
So this relates to #8764.
It's easy to work around by inserting an explicit reference to the block variable outside the macro.
def assert(cond, &err : -> String)
err
{% if flag?(:debug) %}
raise err.call unless cond
{% end %}
end
from crystal.
You probably want to use a macro here:
macro assert(cond, &)
{% if flag?(:debug) %}
raise {{yield}} unless {{cond}}
{% end %}
end
Related: #4263
Otherwise this is essentially a duplicate of #7975
from crystal.
Related Issues (20)
- Proposal: `IO::DupReader` HOT 2
- `Digest` should be an `IO` HOT 1
- Proposal: `Pointer::Appender#to_slice`
- [RFC] Allow setting timeouts on `HTTP::Server::Response` HOT 2
- Iterate slice by reference (not by value)
- Unexpected behavior of the match method with position HOT 7
- Third-party library repositories on Windows CI HOT 1
- 1.13.0 - a big problem with UTF strings after `JSON.parse` when some special symbols present; broken encoding HOT 3
- IO::FileDescriptor & Socket finalizers do far too much
- sudo dnf install crystal results in error HOT 13
- Support double splatting on NamedTuple union. HOT 2
- Failed to update crystal with package managers on Windows HOT 8
- Don't require linking to libraries in order to generate documentation HOT 1
- Streamlining the `WaitGroup` API HOT 4
- Fully qualified name must be used inside a block when assigning to an ivar. HOT 1
- A [no overflow check] compiler direective HOT 7
- crystal i crashes in HAR shard HOT 4
- LLVM 18 breaks 128-bit integers in the interpreter HOT 5
- [CI] Darwin test job fails with `macos-14`
- Process.on_terminate proc cannot be executed? HOT 9
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 crystal.