単純です。our
周囲をunit
何もせずにデフォルトのスコープを使用します。
unit
唯一あなたが持つファイル全体を包囲する必要がないように添加し、{
そして}
一つだけがあったときmodule
、package
、class
、role
、またはsub
ファイルに。
常に使用する必要はありません。
実際、それを使用する必要はありません。
必要に応じて、パラメータ化せずに前方宣言を追加します。
それに追加された特性は、通常、同じ名前のすべての役割に適用されます。
lib/Foo/Bar.rakumod
:
use v6.d;
role Foo::Bar {…} # is export would be added here
role Foo::Bar[Int:D] {
method is-int(::?CLASS:_: --> True) { }
method is-str(::?CLASS:_: --> False) { }
}
role Foo::Bar[Str:D] {
method is-int(::?CLASS:_: --> False) { }
method is-str(::?CLASS:_: --> True) { }
}
その後、それを使用すると、完全修飾名でアクセスできるように自動的にロードされます。
{
use lib <lib>; # only needed because it is not installed
use Foo::Bar;
say Foo::Bar[ 1].is-int; # True
say Foo::Bar[''].is-str; # True
say Foo::Bar.^name; # Foo::Bar
}
say Foo::Bar.^name; # error: Could not find symbol 'Bar' in 'Foo'
この場合、それをモジュールステートメントの中に置くことができるので、Foo::
それほど頻繁に書く必要はありません。
lib/Foo/Bar.rakumod
:
use v6.d;
unit module Foo;
role Bar {…}
role Bar[Int:D] {
method is-int(::?CLASS:_: --> True) { }
method is-str(::?CLASS:_: --> False) { }
}
role Bar[Str:D] {
method is-int(::?CLASS:_: --> False) { }
method is-str(::?CLASS:_: --> True) { }
}
役割は引き続きとしてアクセスできますFoo::Bar
。
これが前の例とまったく同じコードになったとしても、私は驚かないでしょう。
追加する唯一の理由is export
は、のBar
代わりにとしてエクスポートしたい場合ですFoo::Bar
。これは、上記の例の両方に当てはまります。
いつも使う必要があると思っていたのではないでしょうかis export
。多くの場合、そうではありません。
unit module Foo::Bar; # default `our` scoped
our sub baz ( --> 'hello world'){}
use Foo::Bar;
say Foo::Bar::baz(); # hello world
# this works because it was declared as `our`
baz()
モジュールのスコープ内で使用したいだけの場合は、それをエクスポートする必要があります。
unit module Foo::Bar;
our sub baz ( --> 'hello world') is export {}
use Foo::Bar;
say Foo::Bar::baz(); # hello world
# available because of `is export`
say baz(); # hello world
私がまだそれを宣言したことに注意してください。our
誰かがあなたにそれをエクスポートしてほしくない場合でも、それらはまだアクセス可能です。
use Foo::Bar ();
# say baz(); # baz used at line 1. Did you mean 'bag'?
say Foo::Bar::baz(); # hello world
の全体的な目的はis export
、関数に完全修飾名を使用する必要をなくすことです。役割などにも機能することは副次的な利点です。
our
-scoped宣言のないモジュールのunit
-scoped宣言が何らかの理由でグローバルになると思っていました。私is export
はそれが人々が最初にこのような何かをエクスポートしようとするかもしれない方法であると思ったので、私は行動を述べました。