なかだです。

At Wed, 19 Jan 2000 20:28:35 +0900,
Kazunori NISHI <kazunori / swlab.csce.kyushu-u.ac.jp> wrote:
> > 前者はどうするのが美しいかな...
> > 正規表現の()?は,nilだったり""だったりするので困りますね.
> 
> これに限らず、文字列を扱う上では、nil 以外に "" (空文字列)も不要な値と
> 見倣したい場合も多いので、nil や空文字列を対象とした、'||' や '||=' に
> 相当する演算子(と自己代入式)が欲しい、と常々思っていました。

  これは分かります。sh の ${var:-default} みたいな感じで、あると
便利なのは確かなのですが。

> (例えば、|||,|||= とすると)
> 
> 	a = nil
> 	b = ""
> 
> 	a ||| b		# => ""
> 	b ||| "xxx"	# => "xxx"
> 	"xxx" ||| "yyy" # => "xxx"
> 	a |||= "xxx"	# => (a = "xxx")
> 	b |||= "xxx"	# => (b = "xxx")

  私はちょっと演算子まではどうかなーって気がして、こういうときは、
Numeric#nonzero? にならって

class String
  def nonempty?
    self unless empty?
  end
end

のようなもので済ましてます。

> みたいな。名前の問題(この場合、&&& との相関性もあるので)を別にすると、
> 件の例でも、
> 
> -      scheme = ( $2 and $2.empty? )? nil : $2
> +      scheme = $2 ||| nil
> 
> みたいにスッキリします。ていうか、実際のスクリプトは見てませんが、恐ら
> くここで、空文字列の場合に nil を代入しているのは、後で、
> 
> 	var1 = scheme || deafult_scheme

  var1 = scheme.nonempty? || default_scheme

なんてとこで妥協するようじゃダメダメのアマアマでしょうか。

-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦