Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
A Strolling Programmer
[go: Go Back, main page]

A Strolling Programmeraka なかだ

またの名を「風まかせ人まかせ力まかせ」日記

T D I A R Y T I M E S % fgrep -i '' *.td2
  1. jmax (12-27)
  2. なかだ (11-09)
  3. MoonWolf (11-09)
<< 2005/12/ 1 1. RubyにはPHPのescapeshellcmd相当のメソッドはないんですか?
2. Region
2 3 4 5 6 7 8 9 1. Dir.glob(regex)
10 1. 鶴ケ岡八幡宮
11 1. 鎌倉
12 13 1. [-1]
2. Feature Base Object Management & Task Oriented Programming
14 15 16 17 18 19 20 21 22 23 24 25 1. ruby 1.8.4
26 1. optparseのbooleanスイッチ
27 28 29 30 31 >>
«前10日分 追記

2005-12-26 modified at Tue Dec 27 03:35:12 2005

12:42現在晴 6℃

* [ruby] optparseのbooleanスイッチ

optparse 添付のサンプルにある opttest.rb の

42:  # boolean switch(default true)
43:  @exec = true
44:  opts.on("-n", "--no-exec[=FLAG]", TrueClass, "not really execute") {|@exec|}

ところで、引数クラスは TrueClass ではなくて FalseClass じゃないかと思うのだけど。

FalseClassにしてしまうと、--execのデフォルト値もfalseになってしまうので。

$ ruby -roptparse -e '@exec=true;p ARGV.options{|opt|opt.on("-n", "--no-exec[=FLAG]", TrueClass, "not really execute") {|@exec|};opt.parse!}, self' -- --exec
[]
#<Object:0x100f94e8 @exec=true>

$ ruby -roptparse -e '@exec=true;p ARGV.options{|opt|opt.on("-n", "--no-exec[=FLAG]", FalseClass, "not really execute") {|@exec|};opt.parse!}, self' -- --exec
[]
#<Object:0x100f94e8 @exec=false>

引数をつけたほうがはっきりするかな?

$ ruby -roptparse -e '@exec=true;p ARGV.options{|opt|opt.on("-n", "--no-exec[=FLAG]", TrueClass, "not really execute") {|@exec|};opt.parse!}, self' -- --exec=y
[]
#<Object:0x100f94e8 @exec=true>

$ ruby -roptparse -e '@exec=true;p ARGV.options{|opt|opt.on("-n", "--no-exec[=FLAG]", TrueClass, "not really execute") {|@exec|};opt.parse!}, self' -- --exec=n
[]
#<Object:0x100f94e8 @exec=false>

$ ruby -roptparse -e '@exec=true;p ARGV.options{|opt|opt.on("-n", "--no-exec[=FLAG]", FalseClass, "not really execute") {|@exec|};opt.parse!}, self' -- --exec=y
[]
#<Object:0x100f94e8 @exec=true>

$ ruby -roptparse -e '@exec=true;p ARGV.options{|opt|opt.on("-n", "--no-exec[=FLAG]", FalseClass, "not really execute") {|@exec|};opt.parse!}, self' -- --exec=n
[]
#<Object:0x100f94e8 @exec=false>

でも1.9だと--exec=yesがエラーになってるな。

Index: lib/optparse.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/lib/optparse.rb,v
retrieving revision 1.54
diff -U2 -p -r1.54 optparse.rb
--- lib/optparse.rb	22 Nov 2005 14:53:11 -0000	1.54
+++ lib/optparse.rb	26 Dec 2005 04:45:23 -0000
@@ -701,5 +701,5 @@ class OptionParser
     #
     def match(key)
-      return key, *fetch(key) {
+      return key, fetch(key) {
         raise AmbiguousArgument, catch(:ambiguous) {return complete(key)}
       }

お名前: コメント: ヽ(・∀・)ノ ハムー

本日のツッコミ(全1件) [ツッコミを入れる]

_ jmax [やっと分かりました。 opts.on("-n", "--[no-]exec[=FLAG]", TrueClass)..]

Pingback(0)

2005-12-25 modified at Mon Dec 26 13:12:45 2005

* [ruby] ruby 1.8.4

あ、なぜかずっと25日だと思い込んでた。 しかしまた土壇場で何もしてないなぁ。 というか、子供できちゃうと本当に時間がない。 まつもとさんはよくできるなぁ、4人もいるのに。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-12-13 modified at Tue Dec 13 18:21:11 2005

13:25現在晴 6℃

* [ruby] [-1]

もともと全部1バイトずらしてあるだけ。

gc.c:rb_source_filename()

char *
rb_source_filename(const char *f)
{
    char *name;

    if (!st_lookup(source_filenames, (st_data_t)f, (st_data_t *)&name)) {
        long len = strlen(f) + 1;
        char *ptr = name = ALLOC_N(char, len + 1);
        *ptr++ = 0;
        MEMCPY(ptr, f, char, len);
        st_add_direct(source_filenames, (st_data_t)ptr, (st_data_t)name);
        return ptr;
    }
    return name + 1;
}

* Feature Base Object Management & Task Oriented Programming

これだとObjManagerをインスタンス化する必要はないような。 それに、ManagedObjを継承しないといけないというのは、(少なくともRubyでは)不必要な制限に思える。 def_featuresを直接Moduleに定義するとか、mix-inにするとかじゃないかなぁ。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-12-11 modified at Tue Dec 13 00:44:11 2005

* 鎌倉

大仏から長谷観音を廻って、江ノ電で藤沢へ。 薄墨色の猫@長谷観音境内

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-12-10 modified at Sat Dec 10 15:36:04 2005

* 鶴ケ岡八幡宮

通りかかってみれば、なんとじーさんとせきねっちの結婚式がっ!www

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-12-09 modified at Fri Dec 9 16:19:36 2005

* [ruby] Dir.glob(regex)

そりゃglobとはいわんのでは。

でも、GNU findにも-regexなんてpredicateがあったし、便利かもなぁ、 と思って久々にman findしてみると-path-wholenameに変わったらしい。 関係ないけど。

Dir.open(dir){|d|d.grep(regexp)}

だと、ベース名しか比較しないとか再帰しないとか、ちょっと違うわけだけれど、 Dir.regex(pattern)は、不特定の"/"にマッチしうるパターンを与えると、 常に再帰することになるんだろうか。 でも、うっかりrootからマッチしてしまうパターンを使ってしまったりすると、かなりイヤだな。

クラスメソッドよりも、Dir#globとかDir#findみたいののほうが使いやすいかも。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-12-01 modified at Thu Dec 1 18:02:03 2005

* [ruby] Region

Enumerable#uptoInteger#uptoとかString#uptoでオーバーライドされちゃうからなぁ。

class Region
  include Enumerable

  attr_reader :begin, :end

  def initialize(b, e, opt = nil)
    @begin = b
    @end = e
    @left_exclusive = (opt && /</ =~ opt ? true : false)
    @right_exclusive = (opt && />/ =~ opt ? true : false)
  end

  def left_exclusive?; @left_exclusive end
  def right_exclusive?; @right_exclusive end

  def each
    l = @left_exclusive
    r = @right_exclusive
    lim = l || r ? -1 : 0
    val = @begin
    e = @end
    return if !e.nil? and (val <=> e) > lim
    val = val.succ if l
    lim = r ? 0 : 1
    begin
      yield val
      val = val.succ
    end while e.nil? or (val <=> e) < lim
  end

  def include?(val)
    if !@begin.nil? and (val <=> @begin) < (@left_exclusive ? 1 : 0)
      false
    elsif !@end.nil? and (val <=> @end) > (@right_exclusive ? -1 : 0)
      false
    else
      true
    end
  end

  alias === include?

  def step(unit = 1, &block)
    unit = unit.to_i
    raise ArgumentError, "step can't be negative" if unit < 0
    raise ArgumentError, "step can't be 0" if unit.zero?
    val = @begin
    if val.kind_of?(Numeric)
      succ = proc {val += unit}
    else
      succ = proc {unit.times {val = val.succ}}
    end
    succ[] if @left_exclusive
    if @end.nil?
      while true
        yield val
        succ[]
      end
    else
      Range.new(val, @end, @right_exclusive).step(unit, &block)
    end
  end
end

module Comparable
  def between(e, opt = nil)
    Region.new(self, e, opt)
  end
end

class NilClass
  def between(e, opt = nil)
    Region.new(self, e, opt)
  end
end

いや、betweenを前置きにしちゃヘンか。

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-11-27 modified at Tue Nov 29 18:24:01 2005

* [balloon] 茂木五日目AM

今朝はツインリンクは使わず、旧七会村のGSそばにFIN。 地上では北西からの吹き降ろし、山の上の高さからは南東からの吹き込みのため、最初のPDGを南東にとってFINには上空で戻ることに。

  • 離陸 7:50 離陸直前離陸の瞬間
  • PDG 435 8:00 28.95m
  • FIN 途中で風向きが変わってしまい、あきらめて次のFONへ。
  • FON 城里町野原の畑の中。北にそれてマーカーは崖下の田んぼ。300mくらい。
  • FON そのまま北東の上(あくた)へ。 今度は南にそれて200mくらいか?
  • FON 高圧線でおろしきれず、川の上へ。 おまけに何をトチ狂ったか、マーカーも那珂川に。
  • 着陸 10:00 那珂川河川敷 藪にはまった

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-11-26 modified at Tue Nov 29 18:00:55 2005

* [balloon] 茂木四日目AM

  • 離陸 7:13 画像の説明画像の説明
  • PDG lost marker
  • HWZ 300mくらい 日が照り始めて谷風が逆になってしまったため、途中であきらめて投下。 朝靄の中をアプローチするゼッケン24
  • FON 500mくらい
  • FON 競技着陸

* [balloon] 茂木四日目PM

  • 離陸 15:26 花王工場の南 もうちょっと南ではNickとChaseのDonar兄弟が立ち上げてたけど、なぜかえらく煽られていた。 Chase Donar
  • GBM 中央部に投げてしまってNo result
  • PDG はずれ

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

2005-11-25 modified at Tue Nov 29 17:42:31 2005

* [balloon] 茂木三日目AM

ASIMOのシェイプを作ったらしい。ASIMO これだとよく分からないけれど、後ろから足が出ていてASIMOが気球を突き抜けた形になっている。

  • PDG
  • JDG×3 まとめて大はずし。 たぶん誰も行ってないんじゃないかと。
  • FON 266 44cm! 44cm! 正木が同じところで2.09mですげーと思ったら、さらにその上を行ってしまった。正木のFON
  • FON 1kmくらい 杉の木の上。

* [balloon] 茂木三日目PM

  • 離陸 一昨日と同じ 15:12
  • FIN 5mくらい FIN投下直後
  • PDG 292 260mくらい
  • 着陸 15:40

お名前: コメント: ヽ(・∀・)ノ ハムー

Pingback(0)

Key fingerprint = 1E69 3ED2 C05B 6BA4 34B2 FC25 478B C08D 2772 58F6