ソラマメブログ
プロフィール
you Xiao
芸名:黒井悠
...
SL Picks
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 0人
オーナーへメッセージ

2010年09月12日

LSL Portalで本気で調べてみた(その9)

さてさて、さっきの変数のページをもうちょっと見てみましょう
http://wiki.secondlife.com/wiki/LSL_Variables/ja
「変数のスコープ」
変数名は最初に現れたところからその変数が含まれるスコープまで、
 またグローバル変数ではスクリプトの最後までスコープを持ちます。
 同じ名前を同じスコープの中で二度定義することはできませんが、
 内側のスコープで同じ名前を再定義することはできて、
 再定義された名前は外側のスコープの同じ名前を隠蔽します。
 重ねますが、動作的にはCやJavaにきわめて似通っています。
 一方で、次のコードはコンパイルして実行可能です。


って、「スコープ」そのものの意味がわかんねぇ!
スコープドッグしか、思いうかばねぇ
原文どーなってんだ、ちくしょうめ
(この時点で、開始から6時間くらい経過。結構気がたってる)
http://wiki.secondlife.com/wiki/LSL_Variables
「A variable can be limited to only certain parts of the script, depending upon where it is placed.
  This placement, and the areas where it is enabled is called the "scope."
  Variables that apply to the entire script are called global variables: they are defined at the top of the script above the state declarations.
  Variables that are within functions or within nested areas are considered local variables.

 The variable name is in scope from the point it first appears to the end of the scope it is in,
  or the end of the script for global variables.
  A name may not be defined twice in the same scope, but a name may be redefined in an inner scope,
  and it hides the same name at outer scope. Again, the semantics are very similar to C and Java.
  That is to say, the following code will compile and run. 」

?あれ?

ってなんか長くないです?
日本語に対して、原文が妙になげーんですけど

ちょっと訳してみよう...

変数は、宣言した場所によって、特定の範囲だけに限定できます」?

あ、これ、前半は「スコープ」についての説明なんじゃないの?

その範囲は、"スコープ"といいます

ってやっぱり!

スクリプト全てに適用される変数はグローバル変数と呼ばれます
それは、スクリプトの最初からstate宣言の間に定義します

defaultより上に書いたら、スクリプト全体の変数(グローバル変数)
それ以外の場所だと、範囲限定の変数だということね
この範囲のことをスコープって言うと。

で、後半が...
変数の名前が、最初に宣言したところから終わりまでがスコープです
 グローバル変数の場合は、スクリプトの終わりまで
」?

あ、これ、日本語訳のところだ

1つの名前は、同じスコープで二度使うことはできません
でも、中のスコープで再度定義されることはできます

これは、こういうことか

できない:グローバル変数としてdefaultの外で定義した名前を
       同じグローバル変数として、もう一回定義

できる:グローバル変数としてdefaultの外で定義した名前を
       defaultの中で、もう一回定義

そいでもって、そのときは、外の名前は見えなくなるよ

中で再定義すると、外の変数は使えないよってことね

まあ、同じ名前だから、「外の」とか「中の」とか区別できないしね

名前のところでも言ったけど、マジ、Cとかjavaと似てるぜ
次のsampleは、コンパイルして実行できるよーん
---------------------------------------
integer i = 50;

default
{
  state_entry()
  {
    string i = "Hello there!"; //This WILL compile just fine, unlike in Java.
    llOwnerSay(i); //Will say "Hello there!". There is no way to get the global variable i.
  }
}
---------------------------------------
グローバル変数として、integer型のiを宣言して、50って値をいれて
中では、string型のiに"Hello there!"を入れる
で、使ってみると、string型の方を使ってることになってるよってことかー
最初に宣言した方が有効とかじゃなくて
どこに宣言したかが大事なんじゃな
string型の方のスコープは、
state_entryの{}の間だけってことね
ってことは、別のイベントの中だと、integer型のグローバル変数が使えるのかな


同じカテゴリー(LSL)の記事画像
LSLCON2010始まりました
LSL Portalで本気で調べてみた(おしまい)
LSL Portalで本気で調べてみた(その8)
LSL Portalで本気で調べてみた(その6)
LSL Portalで本気で調べてみた(その3)
位置チェック(LSL)
同じカテゴリー(LSL)の記事
 LSLCON2010始まりました (2011-03-21 00:30)
 LSL Portalで本気で調べてみた(おしまい) (2010-09-13 00:39)
 LSL Portalで本気で調べてみた(その10) (2010-09-13 00:05)
 LSL Portalで本気で調べてみた(その8) (2010-09-12 22:19)
 LSL Portalで本気で調べてみた(その7) (2010-09-12 22:14)
 LSL Portalで本気で調べてみた(その6) (2010-09-12 21:57)

Posted by you Xiao at 22:36│Comments(2)LSL
この記事へのコメント
元の訳が誤訳だったんですね。
Posted by ななしさん at 2011年07月16日 11:48
ほんとは気づいたら編集すればいいんですけどね
そういうことをやらずに、ぐだぐだ書くのもなぁ...と思いつつ
とりあえず、日本語訳はお役立ちですが
英語もみようねって感じです。

と言っても、私もかなりギコい訳になってます
Posted by you Xiao at 2011年07月16日 17:20
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。