質問
読み取られるたびにインクリメントする単純なタイドスカラークラスがある場合は、次のようにすることができます。 ジェネラコディセタグプレ
ただし、カウンター変数を作成するには、tie
を使用する必要があります。1つのカウンターを作成してエクスポートできます。しかし、私が本当にやりたいのは、それをOOに見せることです。次のようなnew
メソッドを作成できるようです:
ジェネラコディセタグプレ
次に、メインスクリプトで、次の手順を実行して2つのカウンターを取得します。 ジェネラコディセタグプレ
ネクタイはコピーに耐えられないため、これは機能しないと思います(ドキュメントのどこかで読んでいます)が、これを行う方法はありませんか?
NB。私はそれがスタイルの問題であることを知っています、しかしそれは目にもっと正しいように見えるでしょう。
解決
タイマジックは、含まれる値ではなく変数自体に適用されるため、割り当て全体に適用されません。いくつかのオプションがあります:
参照を返す: ジェネラコディセタグプレ
グロブへの割り当て: ジェネラコディセタグプレ
または、変数をコンストラクターに渡すこともできます: ジェネラコディセタグプレ
両方のメソッドで機能するコンストラクターを作成することもできます: ジェネラコディセタグプレ
最後の2つの例では、tie
に$_[0]
が直接渡されます。これは、@_
の要素が引数リストのエイリアスであるため、my $counter
行にtie
を入力したかのように機能するためです。
そして最後に、あなたの例は非常に明確でベストプラクティスに従っていますが、TIMTOWTDIの精神で、クラス全体を次のように書くことができます。 ジェネラコディセタグプレ
最後にもう1つ言及します。質問はタイ変数に関するものですが、オーバーロードを使用してこれを実現することもできます: ジェネラコディセタグプレ
しかし、割り当てによってカウンターをリセットする機能が失われます。 sub set {$_[0][0] = $_[1]}
メソッドをCounter
に追加できます。