def evaluate(expr, *default, &bl)
      case expr
      when Symbol, String
        catch(:fail) do
          return scope.evaluate(expr, self, *default, &bl)
        end
        raise NameError, "Unable to find `#{expr}` on #{scope}"
      else
        evaluate(render(expr), *default, &bl)
      end
    end
def evaluate(expr, *default, &bl)
      case expr
      when Symbol, String
        catch(:fail) do
          return scope.evaluate(expr, self, *default, &bl)
        end
        raise NameError, "Unable to find `#{expr}` on #{scope}"
      else
        evaluate(render(expr), *default, &bl)
      end
    end
Evaluates `expr` in the current scope. `expr` can be either

 * a Symbol or a String, taken as a dot expression to evaluate
 * a Proc or a Template, first rendered and then evaluated

 Evaluation is delegated to the scope (@see Scope#evaluate) and the result returned
 by this method.