名前空間推測するコードを書いてみた
以前このようなツイートをしたのですが、調べていたら Python で書けそうだったので実際に書いてみました。
サンプルソース
A.py
#!/usr/bin/env python def FizzBuzz(n): if n % 3 and n % 5: return str(n) return ''
B.py
#!/usr/bin/env python def FizzBuzz(n): if n % 3 == 0: return 'Fizz' return ''
C.py
#!/usr/bin/env python def FizzBuzz(n): if n % 5 == 0: return 'Buzz' return ''
fizzbuzz.py
#!/usr/bin/env python from nsinf import At import A import B import C if __name__ == '__main__': for i in xrange(20): texts = At(' FizzBuzz')(i) print ''.join(texts)
端末
$ python fizzbuzz.py 1 2 Fizz 4 Buzz Fizz ...
動作の順序としては
- オブジェクトの木構造を取得します
- 指定したパスにマッチするオブジェクトを拾います
- 関数呼び出しでは該当した全ての関数の呼び出しを試みます
という感じです。
単一のソースコードでも動きます。
http://ideone.com/okTyK