Home > ActionScript 3.0 | Flash | etc. > FlashCS4の不可解な挙動とその回避策の覚書

FlashCS4の不可解な挙動とその回避策の覚書

発売日に購入したものの、あまりCS4を使用してこなかったのですが
最近になって、ようやくさわり始めました。

ところがどっこいCS4。なかなかの難物です。
CS3で普通に動いていたものが動きませんでした。

発生した問題と、検証した結果、その回避策について
ここに覚書として書いておきます。

(前回もそうでしたが、早くも追記しました。)

注:おそらくCS4のバグなので、修正はいるかもです


今回書く『不可解な挙動』に絡んでいるのは
private class です。要するにこういうやつですね。
package{
    public class Hoge{
        //...
    }
}
class Fuga{} // ←これ
この private class はとある条件下で
かなり厄介な症状を引き起こします。

症状と回避策


その厄介な症状とは、複数の private class を作った場合
もしくは、何のクラスも継承せずに
インターフェースだけ実装した場合などに
○○が無い、○○が未定義というエラーがやたら起こります。
特に、インターフェース実装している場合に多いです。

例えば以下のようなコードはエラーになります。

・IHoge インターフェース
package{
    public interface IHoge{
        function myfnc():void;
    }
}

・Hoge クラス
package{
    public class Hoge implements IHoge{
        public function myfnc():void{}
    }
}
class Fuga{}

この場合、myfnc が実装されていません。
という怒られ方をします。
解せませんね・・・、実装してるっちゅうに。

これ以外にもいろいろ発生条件があり、調査中なのですが
とにかく private class を書く人は要注意です。

打つ手なしか・・・と思ってたのですが
つい先ほど、回避策を発見しました。
それはなんとも無駄な実装なのですが
なんでもないクラスを一個作りそれを継承させる
という方法です。

まず、こういうなにもないクラスを作ります。
package{
    public class Foo{}
}
これを private classに継承させます
package{
    public class Hoge implements IHoge{
        public function myfnc():void{}
    }
}
class Fuga extends Foo{}
これでなぜかエラーが出なくなります。
不思議です。まさに不可解です。
ちなみに複数 private class があるときは、片方でもOKでした
こんな感じで
package{
    public class Hoge implements IHoge{
        public function myfnc():void{}
    }
}
class Fuga extends Foo{}
class Fuga2{}
ただしいくらなんでもこの方法は無駄すぎるので
もう少し調べる必要がありそうです。

完全な原因、もしくはもうすこしマシな回避方法が見つかったら
また、記事にまとめようと思います。

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://blog.flair4.jp/mt/mt-tb.cgi/46
Listed below are links to weblogs that reference
FlashCS4の不可解な挙動とその回避策の覚書 from flair4 blog

Home > ActionScript 3.0 | Flash | etc. > FlashCS4の不可解な挙動とその回避策の覚書

Search
Feeds

Return to page top