リストおよびプロパティリストに関するローカルプロパティとグローバルプロパティ
ここで説明する
SenseTalkにおけるリストおよびプロパティリストの詳細情報は、リストおよびプロパティリストをご覧ください。
グローバルプロパティの値を設定するときは、SenseTalkコマンドのSetやPutが使用できます。これらのプロパティを参照する場合は、単語theをプロパティ名の前に使用し、通常の変数と区別する必要があることに注意してください。
例:
set the searchrectangle to (1,2,2,3)
put 2 into the remoteworkinterval
以下の構文を使用して、グローバルプロパティ内で特定の名前付きプロパティの追加や変更を行うことができます。
set the namedColors.pink to color("RGB,1.0,0.5,0.5") -- pinkをthe namedColorsグローバルプロパティに追加し、そのRGBカラー値を定義します
set the listFormat's separator to " & " -- the listFormatグローバルプロパティのseparatorプロパティを設定します
setoptionまたはsetoptionsコマンドを使用して、プロパティの設定や更新を行うこともできます。setoptionコマンドを利用すると単一のプロパティを更新でき、setoptionsコマンドを利用すると複数のプロパティを更新できます。
例:
setoption searchrectangle, (1,2,2,3)
setoptions (searchrectangle: (1,2,2,3), scriptlogging: yes)
ローカルプロパティとグローバルプロパティの扱い方に関する追加情報は、SenseTalkにおけるローカルプロパティとグローバルプロパティをご覧ください。
the listFormatグローバルプロパティ
値:必須の値3つとオプションで追加の値2つを含んだプロパティリスト。
- prefix:テキストへの変換時にリストの先頭に付ける文字。
- separator:テキストへの変換時に各リストアイテム間に表示する文字。
- suffix:テキストへの変換時にリストの末尾に付ける文字。
- quotes(オプション):このプロパティでは、リスト内の値への引用符の付け方を定義します。デフォルトでは、リスト用にquotesの値が設定されないため、リスト値の引用符付けはthe defaultQuoteFormatグローバルプロパティの設定によって管理されます。
- indent(オプション):このプロパティでは、リスト内のアイテムの字下げに使用するテキスト値を設定できます。indentの値を設定すると、各リストアイテムが別々の行に表示され、値は構造のネスティングに応じた倍数のindent値によって字下げされます。
デフォルト:初期設定では、必須の3つの値のみが設定されています。
- prefix: (
- separator: ,
- suffix: )
挙動:このグローバルプロパティでは、リストをテキスト形式に変換するときに使用するフォーマットを定義します。リストをテキストとして表示する際、リストはprefixとsuffixの値によって囲まれ、各リストアイテム間にはseparatorの値が使用されます。
定義済みのthe listFormatの値としては、boxListFormat、jsonListFormatおよびstandardListFormatがあります。
例:
set the ListFormat's separator to period // キーワード「period」を使ってthe ListFormatのseparatorを「.」に設定します
例:
set the listFormat's quotes to "^"
put ("cheese","meat","fruit") // 「(^cheese^,^meat^,^fruit^)」を表示します
例:
set the listformat to (separator:";")
put ("cheese","meat","fruit") // 「cheese;meat;fruit」を表示します
例:
set the ListFormat.prefix to "-->"
put ("cheese","meat","fruit") // 「-->cheese,meat,fruit)」を表示します
例:
set the ListFormat to (separator:";",quotes:"^")
put ("cheese","meat","fruit") // 「^cheese^;^meat^;^fruit^」を表示します
例:
set the listformat to boxListFormat
put (1,2,3,5,7) // 【1】 【2】 【3】 【5】 【7】を表示します
例:
set the listformat to jsonListFormat
put (1,2,3,5,7)
上の例からの出力は、Runウィンドウにおいて次のように表示されます。
[
1,
2,
3,
5,
7
]
例:
set the listFormat.prefix to "[["
set the listFormat's suffix to "]]"
put (1,2,3,4) // 「[[1,2,3,4]]」を表示します
set the listFormat's separator to " & "
set the listFormat's quotes to ("<",">")
put (5,6,7,8) // 「[[<5> & <6> & <7> & <8>]]」を表示します
set the listFormat's indent to " "
put (1,(10,20,30),2)
上の例の最後のputコマンドは、Runウィンドウにおいて次のように表示されます。
[[
<1> &
[[
<10> &
<20> &
<30>
]] &
<2>
]]
例:
set the listformat to standardListFormat
put (1,2,3,5,7) // 「(1,2,3,5,7)」を表示します
関連:
その他の演算子で説明したsplit byおよびjoined by演算子は、テキストからリストへ、またその逆へと明示的に変換するやり方です。リストの扱い方についての詳細は、 リストおよびプロパティリストをご覧ください。
the propertyListFormatグローバルプロパティ
値:以下のプロパティ値を含むことができるプロパティリスト。
- prefix:テキストへの変換時にリストの先頭に付ける文字。
- entrySeparator:テキストへの変換時にリストのキー/値の各組同士の間に表示する文字。
- keySeparator:テキストへの変換時にキーとその値との間に表示する文字。
- suffix:テキストへの変換時にリストの末尾に付ける文字。
- quotes:テキストへの変換時に、プロパティ値の引用符付けに使用する文字または文字群。
- emptyRepresentation:テキストへの変換時、オブジェクトにプロパティがない場合に使用する文字または文字群。
- indent(オプション):このプロパティでは、リスト内のアイテムの字下げに使用するテキスト値を設定できます。indentの値を設定すると、各リストアイテムが別々の行に表示され、値は構造のネスティングに応じた倍数のindent値によって字下げされます。
- asTextEnabled: True、False
デフォルト:以下の振る舞いのところを参照してください。
- prefix: (
- entrySeparator: 「, 」(コンマとスペース)
- keySeparator: :
- suffix: )
- quotes:Standard
- emptyRepresentation: (:)
- asTextEnabled:True
挙動:このグローバルプロパティでは、プロパティリスト(オブジェクト)をテキストに変換するときに使用するフォーマットを定義します。
オブジェクトのテキスト表現が必要になったとき、asTextEnabledがTrue(デフォルト)になっていると、オブジェクトにasText関数メッセージが送られて、そのテキスト表現を取得します。オブジェクトがこのメッセージに対応しない場合、asTextまたはasTextFormatプロパティを使ってテキスト表現を取得します。
asTextEnabledがFalseになっていたり、どのasText機構によっても値が得られなかったりする場合には、別の値が使われます。その場合、オブジェクトのプロパティ群は(キーのアルファベット順で)並べられ、先行する各キー(プロパティ名)とその値との区切りにはkeySeparator(デフォルトでは「:」)が、項目間の区切りにはentrySeparator(デフォルトでは「, 」)が使用されます。
プロパティ値の引用符付けはquotesの値に従います(プロパティリストの場合、デフォルトはStandard。後述のthe defaultQuoteFormatグローバルプロパティを参照)。テキスト全体は、prefixとsuffix(デフォルトでは「(」と「)」)で囲まれます。オブジェクトにプロパティがない場合は、emptyRepresentationプロパティの値(デフォルトでは「(:)」)がそのテキスト表現として使われます。
keySeparatorがemptyに設定されている場合、オブジェクトのキーはリストに記載されず、その値だけが記載されます。
indentの値には、オブジェクト内の項目の字下げに使用するテキスト値を設定することができます。これをempty以外に設定すると、各項目が別々の行に表示され、各行は構造のネスティングに応じた倍数のindent値によって字下げされます。
例:
set the propertyListFormat's entrySeparator to "*"
例:
set the propertyListFormat's keySeparator to "%"
put (Capitol:"Lansing",Bird:"robin") // 「(Bird%"robin", Capitol%"Lansing")」を表示します
例:
set the propertyListFormat to (entrySeparator:";") // keySeparatorがemptyのため、値のみを表示します
put (Capitol:"Lansing",Bird:"robin") // 「robin;Lansing」を表示します
例:
put (astext:"Michigan",Capitol:"Lansing",Bird:"robin") // 「Michigan」を表示します
set the propertyListFormat.asTextEnabled to false
put (astext:"Michigan",Capitol:"Lansing",Bird:"robin") // 「(astext:"Michigan", Bird:"robin", Capitol:"Lansing")」を表示します
例:
set the propertyListFormat to (entrySeparator:"$",keySeparator:"*")
put (Capitol:"Lansing",Bird:"robin") // 「Bird*robin$Capitol*Lansing」を表示します
例:
replace properties (prefix:"[[", suffix:"]]", entrySeparator:"; ", \
keySeparator:" is ") in the propertyListFormat
put (A:1,C:3,B:2) -- [[A is "1"; B is "2"; C is "3"]]を表示します
delete the propertyListFormat's keySeparator
set the propertyListFormat.quotes to "None"
put (A:1,C:3,B:2) -- [[1; 2; 3]]を表示します
set the propertyListFormat.emptyRepresentation to "[[no properties]]"
put (:) -- [[no properties]]を表示します
関連:
プロパティリストをテキスト表現に変換する際の詳細については、リストおよびプロパティリストをご覧ください。
the listInsertionModeローカルプロパティ
値:item by item、nested
デフォルト:the defaultListInsertionModeグローバルプロパティ(初期設定はitem by item)
挙動:このローカルプロパティでは、アイテムのリストが別のリストに追加されるときのアイテムの振る舞いを管理します。このプロパティをitem by itemに設定すると、追加元のリストからの各アイテムが別々に追加されます。nestedに設定すると、追加元のリストがネストされたリストとして追加されます。
the listInsertionModeの値は、ハンドラごとのローカルな値です。ハンドラの実行開始時、そのハンドラ内のthe listInsertionModeは、the defaultListInsertionModeグローバルプロパティの値に初期設定されます。
例:
set the ListInsertionMode to nested // the ListInsertionModeローカルプロパティをデフォルトの「item by item」から変更します
例:
set the listInsertionMode to nested
put ("maple","oak","pine") into localtrees
insert ("willow","sassafras") after localtrees
log localtrees // 「(maple,oak,pine,(willow,sassafras))」を表示します
例:
put (1,2,3,4) into list // (1,2,3,4)
put ("A","B") into otherList // (A,B)
insert otherList after item 2 of list // (1,2,A,B,3,4)
set the listInsertionMode to "nested"
insert otherList after item 2 of list // (1,2,(A,B),A,B,3,4)
例:
set Biggest to ("sun","earth")
set Smallest to ("moon","you")
log myNestedList(Biggest,Smallest,2) // 「(sun,(moon,you),earth)」を表示します
insert Smallest before item 2 of Biggest // the ListInsertionModeはデフォルトの「item by item」の設定のままです
log Biggest // 「(sun,moon,you,earth)」を表示します
to myNestedList InitialList,SecondaryList,position // カスタム関数ハンドラ「myNestedList」を、3つのパラメータとともに宣言します
set the ListInsertionMode to nested // ここでthe ListInsertionModeローカルプロパティを指定することは、すなわち、この設定がこの関数ハンドラでのみ有効になり、初期スクリプトハンドラでは有効にならないということです
insert SecondaryList before item position of InitialList
return InitialList
end myNestedList
ヒント:the listInsertionModeローカルプロパティは、プロパティを呼び出した特定のハンドラの振る舞いだけを変更したいときに使用します。現在の実行時環境内で設定を持続させ、スクリプトやハンドラ間で保持したい場合は、(the listInsertionModeローカルプロパティではなく)the defaultListInsertionModeグローバルプロパティを使用します。
関連:
the defaultListInsertionModeグローバルプロパティ
値:item by item、nested
デフォルト:item by item
挙動:このグローバルプロパティでは、アイテムのリストが別のリストに追加されるときのアイテムの振る舞いを管理します。このプロパティをitem by itemに設定すると、追加元のリストからの各アイテムが別々に追加されます。nestedに設定すると、追加元のリストがネストされたリストとして追加されます。
例:
set the defaultListInsertionMode to nested
例:
set Alignment to ("sun","earth")
set the defaultListInsertionMode to "item by item"
insert ("moon","you") after the first item of Alignment
put Alignment // 「(sun,moon,you,earth)」を表示します
例:
set People to ("Susan","Joe","Ricky","Jennifer")
set the defaultListInsertionMode to nested
insert ("Robert","Kelly") into People
log People // 「(Susan,Joe,Ricky,Jennifer,(Robert,Kelly))」を表示します
例:
put ("A","B","C") into Letters
set the defaultListInsertionMode to nested
insert (1,2) before item 2 of Letters
put Letters // 「(A,(1,2),B,C)」を表示します
ヒント:the listInsertionModeローカルプロパティは、プロパティを呼び出した特定のハンドラの振る舞いだけを変更したいときに使用します。現在の実行時環境内で設定を持続させ、スクリプトやハンドラ間で保持したい場合は、(the listInsertionModeローカルプロパティではなく)the defaultListInsertionModeグローバルプロパティを使用します。
関連:
the DuplicatePropertyKeyModeグローバルプロパティ
値:error、first、last、list
デフォルト:error
挙動:このグローバルプロパティでは、1つのプロパティリスト内で同じキーが繰り返し使用されていたときの処理方法を管理します。
- このプロパティをerrorに設定すると、例外が投げられます。
- firstまたはlastに設定すると、当該キーに与えられた最初(または最後)の値だけが使用され、重複のキーは無視されます。
- listに設定すると、当該キーに与えられたすべての値が受け入れられ、リストに統合されます。
例:
set the DuplicatePropertyKeyMode to error // initialハンドラまたは呼び出されたハンドラ内で重複キーのあるプロパティリストの参照が行われた場合(例、 「(Capitol:"Lansing",Population:"9.928 million",Population:"26")」など)、例外を投げます
例:
set the duplicatePropertyKeyMode to last
set meal to ((beverage:"Water",dessert:"Ice Cream",entree:"Hamburger",dessert:"Cake"))
log meal // 「(beverage:"Water", dessert:"Cake", entree:"Hamburger")」を表示します
例:
set the duplicatePropertyKeyMode to list
set meal to ((beverage:"Water",dessert:"Ice Cream",entree:"Hamburger",dessert:"Cake"))
log meal // 「(beverage:"Water", dessert:(Ice Cream,Cake), entree:"Hamburger")」を表示します
関連:
プロパティリストの扱い方についての詳細は、 プロパティリストをご覧ください。
the strictPropertiesグローバルプロパティ
値:True、False
デフォルト:False
挙動:このプロパティでは、プロパティリスト内で未設定のプロパティにアクセスしようとしたときの振る舞いを管理します。the strictPropertiesをfalseに設定すると、SenseTalkが未定義のプロパティの値としてemptyを返します。the strictPropertiesをtrueに設定すると、未定義のプロパティへのアクセスによって例外が投げられます。
例:
set the StrictProperties to true // デフォルトの振る舞いを変更し、未定義のプロパティの参照時にエラーが起こるようにします
例:
set the StrictProperties to true
put (Capitol:"Lansing",Bird:"robin",Population:"9.928 million") into Michigan
Log Michigan's Song // 「Song」はプロパティリスト内で定義済みのプロパティではないため、エラーが投げられます。StrictPropertiesがfalseであれば、logコマンドによって表示されるのは空のメッセージになります
例:
put a new object into emptyObj
put (property abc of emptyObj) is empty -- 「true」を表示します
set the strictProperties to true
put (property abc of emptyObj) is empty -- 例外を投げます
the objectContainsItemDefinitionグローバルプロパティ
値:AsTextContains、NestedValueContains、KeyOrValueEquals
デフォルト:AsTextContains
挙動:このプロパティでは、演算子または関数によるプロパティリスト内のキーおよび値へのアクセス方法を管理します。このプロパティをAsTextContains(デフォルト)に設定すると、オブジェクトのテキスト値に検索値が含まれている場合にcontainsItem関数がtrueを返します。NestedValueContainsに設定すると、オブジェクトの各値に演算子が適用され、そのどれかに検索値が含まれている場合に式がtrueを生成します。そして最後のKeyOrValueEquals設定の場合、オブジェクトのキーまたは値のどれか1つと検索値が等しい場合にtrueが返されます。
例:
set the objectContainsItemDefinition to KeyOrValueEquals // オブジェクトのキーと値の両方をチェックし、検索値と一致しているかどうか確認します
例:
set State to (AsText:"Michigan",Capitol:"Lansing",Bird:"robin",Population:"9.928 million")
log State contains "robin" // 「False」を表示します
set the objectContainsItemDefinition to NestedValueContains
log State contains "robin" // 「True」を表示します
例:
set PersonalInfo to (asText:"Robert",age:31,hair:"brown",height:"5 feet 11 inches",degrees:("BS","MS"))
put "hair" is among the keys of PersonalInfo // 「true」を返します
put PersonalInfo contains "hair" // プロパティリストのテキスト値は「Robert」のため、「false」を返します
set the objectContainsItemDefinition to KeyorValueEquals
put "hair" is in PersonalInfo // hairはプロパティリストのキーであるため、「true」を返します
put "BS" is in PersonalInfo // 「BS」はプロパティリストのキーでも値でもないため、「false」を返します
set the objectContainsItemDefinition to NestedValueContains
put PersonalInfo contains "BS" // 「BS」はプロパティリスト内のネストされた値のため、「true」を返します
関連: