On Tuesday, 12 March 2013 at 08:28:02 UTC, Vladimir Panteleev wrote:
On Tuesday, 12 March 2013 at 07:41:03 UTC, Lars T. Kyllingstad wrote:
On Wednesday, 6 March 2013 at 07:27:19 UTC, Lars T. Kyllingstad wrote:
On Tuesday, 5 March 2013 at 21:04:15 UTC, Vladimir Panteleev wrote:
5. How about that Environment.opIn_r?

Forgot about it. :)  I'll add it.

So I sat down to write this function, but then I reconsidered.
The thing is, checking whether the variable exists is exactly the same operation as retrieving it. In other words, this:

  if (key in environment)
  {
      auto val = environment[key];
      ...
  }

is equivalent to:

  if (environment.get(key) !is null)
  {
      auto val = environment.get(key);
      ...
  }

Yes, it's just syntax sugar, and an operation supported by AAs (which environment imitates). It's useful if you don't want to retrieve the value of a variable right after checking if it exists - you just want to see if it's there or not.

For AAs, 'in' returns a pointer to the element, which is null if the element does not exist. I can't think of a good way to implement this. Since we have to convert the raw environment variable to a D string anyways, we'd have to do something like:

  string* opIn_r(string var)
  {
      auto val = get(var);
      if (val is null) return null;
      else return [val].ptr;
  }

but that seems rather pointless to me.

Lars

Reply via email to