[#32727] require "./xxx" の「カレントディレクトリ」の意味 — Take_tk <ggb03124@...>

あるディレクトリαにあるスクリプトAに「require "./xxx"」と書いてあると、

21 messages 2001/12/03
[#32733] Re: require "./xxx" の「カレントディレクトリ」の意味 — matz@... (Yukihiro Matsumoto) 2001/12/03

まつもと ゆきひろです

[#32746] Re: require "./xxx" の「カレントディレクトリ」の意味 — Tanaka Akira <akr@...17n.org> 2001/12/04

In article <1007384829.854960.10474.nullmailer@ev.netlab.jp>,

[#32749] Re: require "./xxx" の「カレントディレクトリ」の意味 — Take_tk <ggb03124@...> 2001/12/04

たけ(tk)です。

[#32772] newdate — tadf@...

ふなばです。

108 messages 2001/12/04
[#32850] Re: newdate — Tanaka Akira <akr@...17n.org> 2001/12/10

In article <20011204234521G.tadf@kt.rim.or.jp>,

[#32855] Re: newdate — tadf@... 2001/12/10

ふなばです。

[#32859] Re: newdate — matz@... (Yukihiro Matsumoto) 2001/12/10

まつもと ゆきひろです

[#32860] Re: newdate — tadf@... 2001/12/10

ふなばです。

[#32889] Re: newdate — Tanaka Akira <akr@...17n.org> 2001/12/12

In article <20011210180612F.tadf@funaba.org>,

[#34281] Re: newdate — tadf@... 2002/03/10

ふなばです。

[#33661] when.exe の Ruby 化 (Re: newdate) — Takashi SUGA <suchowan@...> 2002/01/29

すいません。件名が変だったので、再送します。コメントをくださる方は、

[#32797] dir_config (mkmf.rb) のオプション指定の優先順位 — tamra@...

12 messages 2001/12/05
[#32798] Re: dir_config (mkmf.rb) のオプション指定の優先順位 — nobu.nakada@... 2001/12/06

なかだです。

[#32807] irb 0.8 release — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

21 messages 2001/12/07
[#32808] Re: irb 0.8 release — rubikitch <rubikitch@...> 2001/12/07

From: keiju@rational.com (Keiju ISHITSUKA)

[#32935] Ruby256 倍本 " 界道編 " — shukaku@...

23 messages 2001/12/15
[#32963] Re: Ruby256 倍本 " 界道編 " — Shin-ichiro HARA <sinara@...> 2001/12/19

原です。

[#33014] "Walrus" on LinuxJapan — Taku Nakajima <tnakajima@...>

中島@ブレーンです。

13 messages 2001/12/24

[#33050] cgi.rb で cookie の encoding について — Beyond <beyond@...>

74 messages 2001/12/28
[#33054] Re: cgi.rb で cookie の encoding について — "U.Nakamura" <usa@...> 2001/12/28

こんにちは、なかむら(う)です。

[#33057] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33059] Re: cgi.rb で cookie の encoding について — nobu.nakada@... 2001/12/28

なかだです。

[#33060] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33063] Re: cgi.rb で cookie の encoding について — nobu.nakada@... 2001/12/28

なかだです。

[#33065] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33062] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/28

青山です。

[#33075] Re: cgi.rb で cookie の encoding について — Takahiro Kambe <taca@...> 2001/12/28

In message <20011228054515.726.qmail@localhost>

[#33078] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33083] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/28

青山です。

[#33090] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33105] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/29

青山です。

[#33120] Re: cgi.rb で cookie の encoding について — Tanaka Akira <akr@...17n.org> 2001/12/30

In article <20011229013722.1869.qmail@localhost>,

[#33124] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/30

青山です。

[#33131] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/31

[ruby-list:32846] Re: dir_config (mkmf.rb) のオプション指定の優先順位

From: nobu.nakada@...
Date: 2001-12-09 17:35:06 UTC
List: ruby-list #32846
なかだです。

At Sun, 9 Dec 2001 12:18:22 +0900,
TAKAHASHI Masayoshi <maki@open-news.com> wrote:
> defaultが3通りの意味で使われているのはさすがに「わかりにくい」
> と思うです。
> 
> というわけで、*1をdefault_args または args、*3をdirにする、
> なんてのがidir/idefault、ldir/ldefaultとの対称性からもわかり
> よいんではないかと思いました。どうでしょ。

うーむ。御意。

> それはさておき、引数の数やクラスによって意味が変わるメソッド
> を、Rubyでわかりやすく記述するのってむずかしいですよね。
> いつも悩みます。

最近もruby-talkでそんな話がありましたが、そのときに作ったのをつ
けておきます。(3)はサブクラスで失敗しますが。

> 「彼の言葉には必ず3通りの意味がある」ってアシモフ『銀河帝国
> の興亡』でしたっけ?<9通りだったかも<どうでもいいって(汗;

うむむ、覚えてない。何巻? っつても昔図書館で読んだから手元にな
いんだよなぁ。


Index: mkmf.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v
retrieving revision 1.64
diff -u -2 -p -r1.64 mkmf.rb
--- mkmf.rb	2001/12/06 09:54:19	1.64
+++ mkmf.rb	2001/12/09 13:09:27
@@ -336,20 +336,21 @@ def create_header()
 end
 
-def dir_config(target, idefault=nil, ldefault=nil)
-  if idefault && ldefault == nil
-    default = idefault
-    idefault = default + "/include"
-    ldefault = default + "/lib"
+def dir_config(target, *args)
+  case args.size
+  when 0, 1
+    default, = args
+  when 2
+    idefault, ldefault = args
+  else
+    raise ArgumentError, "too many default directories"
   end
-
   dir = with_config(target + "-dir", default)
+  if dir
+    idefault = dir + "/include"
+    ldefault = dir + "/lib"
+  end
 
-  idir, ldir = if dir then [
-      dir + "/include",
-      dir + "/lib"
-    ] else [
-      with_config(target + "-include", idefault),
-      with_config(target + "-lib", ldefault)
-    ] end
+  idir = with_config(target + "-include", idefault)
+  ldir = with_config(target + "-lib", ldefault)
 
   if idir

module Overload
  class Signature < Array
    def invalid
      TypeError.new("Invalid Signature: #{collect {|a| a.type}.join(', ')}")
    end

    def ===(args)
      if last
	(l = length) == args.length or return false
      else
	(l = length-1) <= args.length or return false
      end
      l.times {|i| self[i] === args[i] or return false}
      true
    end

    def dispatch(*types, &block)
      throw :dispatched, yield(*self) if Signature[*types] === self
    end
  end

  def overload(args)
    args = Signature[*args]
    catch(:dispatched) do
      yield args
      raise args.invalid
    end
  end

  def self.dispatch(recv, func, args, block)
    klass = tbl = sig = meth = nil
    recv.type.ancestors.find do |klass|
      tbl = klass.instance_eval {@overload} or next
      tbl = tbl[func] or next
      sig, meth = tbl.find {|sig, meth| sig === args}
      meth
    end or raise Signature[*args].invalid
    meth.bind(recv).call(*args, &block)
  end
end

class Module
  def overload(func, *types)
    tbl = meth = nil
    func = func.intern if func.respond_to? :intern
    sig = Overload::Signature[*types]
    instance_eval do
      tbl = @overload ||= {}
      meth = instance_method(func)
    end
    if meth.arity < 0 or sig.length < meth.arity
      sig << nil if sig.last
    elsif sig.length > meth.arity
      raise ArgumentError, "too many arguments for #{func}(#{sig.length} for #{meth.arity})"
    end
    (tbl[func] ||= []) << [sig, meth]
    module_eval "def #{func}(*args, &block) ::Overload.dispatch(self, :#{func}, args, block) end"
  end
end

if $0 == __FILE__
  require 'runit/testcase'
  require 'runit/cui/testrunner'
  END {  
    RUNIT::CUI::TestRunner.run(RUNIT::TestCase.all_suite)
  }

  class TestOverload < RUNIT::TestCase
    include Overload

    # (1) dispatch in overload block
    def do_dispatch(*args)
      overload(args) do |args|
	args.dispatch(Fixnum, String, Float) do |i, s, f|
	  [i, s, f]
	end
	args.dispatch(String, Fixnum) do |s, i|
	  return [s, i]
	end
	args.dispatch(String, Fixnum, ()) do |s, i, *a|
	  return [s, i, *a]
	end
      end
    end

    # (2) signature case
    def do_signature(*args)
      case args = Signature[*args]
      when Signature[Fixnum, String, Float]
	i, s, f = args
	[i, s, f]
      when Signature[String, Fixnum]
	s, i = args
	return s, i
      when Signature[String, Fixnum, ()]
	s, i, *a = args
	return s, i, *a
      else
	raise args.invalid
      end
    end

    # (3) separated methods
    def do_overload(i, s, f)
      assert_kind_of(TestOverload, self)
      [i, s, f]
    end
    overload(:do_overload, Fixnum, String, Float)

    def do_overload(s, i)
      assert_kind_of(TestOverload, self)
      return [s, i]
    end
    overload(:do_overload, String, Fixnum)

    def do_overload(s, i, *a)
      assert_kind_of(TestOverload, self)
      [s, i, *a]
    end
    overload(:do_overload, String, Fixnum)

    # test suit
    def test_cvar
      assert_kind_of(Hash, o = type.instance_eval {@overload})
      assert_kind_of(Array, o = o[:do_overload])
      case self
      when TestSuper
	assert_equal(1, o.length)
      when TestOverload
	assert_equal(3, o.length)
      end
      assert_kind_of(Overload::Signature, o[0][0])
      assert_kind_of(UnboundMethod, o[0][1])
    end

    def do_test_result(f)
      assert_equal([123, "hello", 123.456], __send__(f, 123, "hello", 123.456))
    end
    def do_test_return(f)
      assert_equal(["hello", 123], __send__(f, "hello", 123))
    end
    def do_test_rest(f)
      assert_equal(["hello", 123, "abc", "def"], __send__(f, "hello", 123, "abc", "def"))
    end
    def do_test_nomatch(f)
      e = assert_exception(TypeError) {__send__(f, "abc", "def")}
      assert_match(e.message, /\sString,\s*String\z/)
    end

    %w[dispatch overload signature].each do |t|
      %w[result return rest nomatch].each do |f|
	eval "def test_#{t}_#{f}; do_test_#{f}(:do_#{t}); end"
      end
    end
  end

  class TestSuper < TestOverload
    def do_dispatch(*args)
      overload(args) do |args|
	args.dispatch(String, String) do |f, s|
	  [f, s]
	end
	return super
      end
    end

    def do_signature(*args)
      case args = Signature[*args]
      when Signature[String, String]
	f, s = args
	[f, s]
      else
	super
      end
    end

    def do_overload(f, s)
      assert_kind_of(TestSuper, self)
      [f, s]
    end
    overload(:do_overload, String, String)

    def do_test_super(f)
      assert_equal(["abc", "def"], __send__(f, "abc", "def"))
    end

    %w[dispatch overload signature].each do |t|
      undef_method "test_#{t}_nomatch"
      %w[super].each do |f|
	eval "def test_#{t}_#{f}; do_test_#{f}(:do_#{t}); end"
      end
    end
  end
end


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread