Lähettäjä: Luke Graham <spoooq@gmail.com>
Aihe: can anyone verify this code as correct?class Object
def choices(choicelist)
if (!Class.class_variables.include? "@@cont")
@@cont =
end
You can use '@@cont ||= '.
choicelist.each { |choice|
callcc { |cc|
@@cont << cc
return choice
}
}
nil
end
Continuation returns after the block, either with the value of the
block or the parameter to #call, and it stores its execution context.
Here you're returning in the middle of a loop, so I'm thinking each
#call will cause the remaining 'choicelist' to be iterated over again,
so the actual return value is going to be 'choicelist'.
def condition(cond)
return if (self.class == NilClass?)
@@cont.pop.call if !cond.call
end
end
You're attempting to loop until the condition is true? If I'm
understanding correctly you're trying to find the first values that
fill all the conditions set forth?
class NilClass?
def method_missing(methId, *args)
return false
end
endfoo = choices(1..100)
bar = choices(1..100)
choices() returns nil, no?
condition(lambda{foo == (bar * 3)})
condition(lambda{bar > 10})
condition(lambda{(bar % 2) == 0})
puts foo
puts barThanks for your help.
What are you trying to do, exactly? I'm sure there's an easier way if
you just want to compose conditionals like this; or are you trying to
get a handle on how callcc works? In the former case, you'd probably
want to try something with blocks instead... callcc is really just a
glorified goto.
E