
Ubuntu日本語フォーラム

ログインしていません。
少しこの「開発環境」フォーラムで取り扱う趣旨とは異なるかもしれないのですが
他に適当なフォーラムが見当たらなかったので、素朴な疑問を投稿致します。
今日何気なくnautilusで /usr/bin/ の下を眺めていたところ
add-apt-repository がバイナリではなく ASCIIファイルのアイコンになっていました。
興味を持ったのでgeditで開いてみたら、その実体はPythonスクリプトでした。
私にはどうせ読んでも分からないだろうとは思いましたが、一応上から眺めていって
気になった点が1点あります。
def utf8(s):
"""
Takes a string or unicode object and returns a utf-8 encoded
string, errors are ignored
"""
if s is None:
return None
if isinstance(s, unicode):
return s.encode("utf-8", "ignore")
return unicode(s, "utf8", "ignore").encode("utf8")という関数についてですが、全く同じ関数が2個ありませんか?
16行目から始まる utf8(s) 関数と
50行目から始まる utf8(s) 関数が、全く同じに見えます。
149行目でこの関数は
print " %s" % utf8(ppa_info["description"] or "")
として呼び出されているのですが、この場合全く同じ関数名で2つ定義してあると
どっちが呼ばれるんでしょうね?(中身が全く同一だからどっちが呼ばれても同じ挙動
しそうですが・・・)。
後から読まれた関数名で、ファイルの上の方に定義されてある関数が上書きされる感じですかね?
クラスの中のメソッドとして同じメソッド名で、シグニチャが異なるならオーバーロードか〜とか
思うのですが、クラスでもないただの関数でシグニチャも全く同じな為、どうなるのかなと・・・。
にしても、そもそもどうして全く同じ関数が2つあるのでしょうか?不思議です。
些細な疑問ですが、もしご存じの方ご教示頂けますと幸いです。
以上、よろしくお願い致します。
オフライン
確かに全く同じ関数が宣言されていますね。
どっちが呼ばれるんでしょうね?(中身が全く同一だからどっちが呼ばれても同じ挙動
しそうですが・・・)。
後から読まれた関数名で、ファイルの上の方に定義されてある関数が上書きされる感じですかね?
重複した名前の関数が宣言されている場合、呼び出しの時点で最も最後に宣言されていた関数が実行されます。
この場合は50行目の関数が呼び出されるはずです。
バグ報告しておきました。
https://bugs.launchpad.net/ubuntu/+source/software-properties/+bug/1014038
オフライン
なるほど、バグでしたか。
バグ報告ありがとうございます。
疑問が解決してすっきりしました。
オフライン