Project

General

Profile

Actions

Feature #584

closed

ENV#[]= and nil

Added by mame (Yusuke Endoh) over 15 years ago. Updated almost 13 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-dev:36465]

Description

=begin
遠藤です。

1.8 では ENV["FOO"] = nil は環境変数を消しますが、1.9 ではエラーになり、
不便です。子プロセスを作るときなどで、一時的に環境変数を変えるために

 env_foo = ENV["FOO"]
 ENV["FOO"] = "something"
 system(...)
 ENV["FOO"] = env_foo

で済んでいたところが

 env_foo = ENV["FOO"]
 ENV["FOO"] = "something"
 system(...)
 if env_foo
   ENV["FOO"] = env_foo
 else
   ENV.delete("FOO")
 end

ととても冗長になります。いろんなソースでこのコードを書く必要があります。
「nil の特別扱いをなくす」という一貫性のために、利便性が犠牲になりすぎ
だと思います。

なので、

  1. 1.8 の挙動に戻す (ENV だけ nil を特別扱いする)
  2. 1.8 の ENV#[]= と同じ挙動をするメソッドを提供する (ENV#assign とか)

のどっちかをするのはどうでしょうか。

--
Yusuke ENDOH
=end

Actions #1

Updated by matz (Yukihiro Matsumoto) over 15 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:36465] [feature:1.9] ENV#[]= and nil"
on Mon, 22 Sep 2008 20:42:38 +0900, "Yusuke ENDOH" writes:
|1.8 では ENV["FOO"] = nil は環境変数を消しますが、1.9 ではエラーになり、
|不便です。子プロセスを作るときなどで、一時的に環境変数を変えるために

<中略>

|ととても冗長になります。いろんなソースでこのコードを書く必要があります。
|「nil の特別扱いをなくす」という一貫性のために、利便性が犠牲になりすぎ
|だと思います。
|
|なので、
|
|1. 1.8 の挙動に戻す (ENV だけ nil を特別扱いする)
|2. 1.8 の ENV#[]= と同じ挙動をするメソッドを提供する (ENV#assign とか)
|
|のどっちかをするのはどうでしょうか。

おっしゃることはもっともなので前者の対応をします。

=end

Actions #2

Updated by matz (Yukihiro Matsumoto) over 15 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r19463.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0