If statements don't introduce a new scope, like ruby, but they are a little tricky.
For example, if b
is false in the following, what would a
be?
If you want to unquote the args from a block, be sure to not include the pipes.
#Correct
quote do
`list`.each { `block.arguments` cool_thing; `[block.body]` }
end
#Wrong
In the Mirah compiler, you can make Macros that work on std lib / predefined classes. You can't, however, do it in your own code easily at the moment. You can add macros that apply to your own types but not others. Here's some ideas for an API to change that.
Questions
# Sake Brewing Scheduler | |
require 'date' | |
def dfmt date | |
case date | |
when Date | |
date.strftime "%a, %b %e" | |
when Range | |
[date.first,date.last].map{|d|dfmt(d)}.join(" - ") | |
end |
import java.util.concurrent.ArrayBlockingQueue | |
import java.util.concurrent.ConcurrentHashMap | |
import java.util.concurrent.atomic.AtomicLong | |
queue_size = 10 | |
queue = ArrayBlockingQueue.new queue_size, true | |
counts = {"A"=> AtomicLong.new, "B" => AtomicLong.new} | |
producerA = Thread.new do | |
while true |
mirah 0.1.2 release highlights | |
- improvements to the new mirrors implementation (try it with -T) | |
- improvements to the new backend implementation (try it with -N) | |
- added better casting for methods that return primitives (754cc38f) | |
- =~, include? macros added to String (Thanks altamic) | |
- << operator added to StringBuilder | |
- improved line number recording in new backend | |
- fixed a few macro expansion related bugs | |
- Added Apache 2 license to gem metadata |
$ rake gem | |
rm -rf build/bootstrap | |
mkdir -p build/bootstrap | |
Compiling 10 source files to /Users/nick/hacking/mirah_hacking/mirah/build/bootstrap | |
/Users/nick/hacking/mirah_hacking/mirah/src/org/mirah/IsolatedResourceLoader.java | |
/Users/nick/hacking/mirah_hacking/mirah/src/org/mirah/MirahClassLoader.java | |
/Users/nick/hacking/mirah_hacking/mirah/src/org/mirah/jvm/compiler/Cleaned.java | |
/Users/nick/hacking/mirah_hacking/mirah/src/org/mirah/jvm/types/Flags.java | |
/Users/nick/hacking/mirah_hacking/mirah/src/org/mirah/jvm/types/MemberAccess.java | |
/Users/nick/hacking/mirah_hacking/mirah/src/org/mirah/jvm/types/MemberKind.java |
# add a curry method to symbol for evil/awesome symbol to proc powers. | |
class Symbol | |
def curry(n=nil) | |
->(*args) { | |
->(obj) {obj.send self, *args} | |
}.curry(n) | |
end | |
def call(*n) | |
curry.(*n) |