Question

I am still working on my text adventure. I am having trouble with the use/with function. It is meant to call a Hash in which the key is the used object and the content includes an array; the first element in the array is the target object, and the second a Proc that will be executed if that relation turns to match the arguments for the use/with function.

Please, may you clarify me how I can store a code block inside an array inside a hash so I can recall it later depending on the objects that are being combined?

Here is my use function that takes "use object with with":

    def use(object, with)
    if INTERACTIONS[object][0] == with
        INTERACTIONS[object][1]
    end
end

And this is how I defined the relations (so far there is just one):

INTERACTIONS = {"key" => ["clock", p = Proc.new{puts "You open the clock!"}]}

Whenever I type

use key with clock

it returns nothing but a new prompt line.

Was it helpful?

Solution

You forgot to .call the proc:

INTERACTIONS = {"key" => ["clock", Proc.new {puts "You open the clock!"}]}

def use(object, with)
  if INTERACTIONS[object][0] == with
    INTERACTIONS[object][1].call  # procs need to be `call`ed :)
  end
end


use("key", "clock") # => You open the clock!
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top