From simon.urbanek at r-project.org  Wed Oct 18 17:44:23 2006
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Wed, 18 Oct 2006 11:44:23 -0400
Subject: [Rd] Error condition in evaluating a promise
In-Reply-To: <m2d58psl5d.fsf@ziti.local>
References: <0359A469-1F7D-4CEF-A408-CCB185D5F90E@r-project.org>
	<6phvemixy1u.fsf@gopher4.fhcrc.org>
	<6phvemiuw3r.fsf@gopher4.fhcrc.org>
	<9AE19AAE-9CAD-4697-82DC-07724445114C@r-project.org>
	<m2d58psl5d.fsf@ziti.local>
Message-ID: <5EB2115D-9911-4268-85FA-9AB03F0D9009@r-project.org>

Seth,

thanks for the suggestions.

On Oct 18, 2006, at 11:23 AM, Seth Falcon wrote:

> Simon Urbanek <simon.urbanek at r-project.org> writes:
>> thanks, but this is not what I want (the symbols in the environment
>> are invisible outside) and it has nothing to do with the question I
>> posed: as I was saying in the previous e-mail the point is to have
>> exported variables in a namespace, but their value is known only
>> after the namespace was attached (to be precise I'm talking about
>> rJava here and many variables are valid only after the VM was
>> initialized - using them before is an error).
>
> We have a similar use case and here is one workaround:
>
> Define an environment in your name space and use it to store the
> information that you get after VM-init.
>
> There are a number of ways to expose this:
>
> * Export the env and use vmEnv$foo
>
> * Provide accessor functions, getVmFooInfo()
>
> * Or you can take the accessor function approach a bit further to make
>   things look like a regular variable by using active bindings.  I can
>   give more details if you want.  We are using this in the BSgenome
>   package in BioC.
>

I'm aware of all three solutions and I've tested all three of them  
(there is in fact a fourth one I'm actually using, but I won't go  
into detail on that one ;)). Active bindings are the closest you can  
get, but then the value is retrieved each time which I would like to  
avoid.

The solution with promises is very elegant, because it guarantees  
that on success the final value will be locked. It also makes sense  
semantically, because the value is determined by code bound to the  
variable and premature evaluation is an error - just perfect.

Probably I should have been more clear in my original e-mail - the  
question was not to find a work-around, I have plenty of them ;), the  
question was whether the behavior of promises under error conditions  
is desirable or not (see subject ;)). For the internal use of  
promises it is irrelevant, because promises as function arguments are  
discarded when an error condition arises. However, if used in the  
"wild", the behavior as described would be IMHO more useful.

Cheers,
Simon




[Rd] Error condition in evaluating a promise
Simon Urbanek