2016-06-14 34 views

答えて

6

#(1,2,3)は要素が分離され、配列リテラルですスペースまたはタイプのいずれかによって、最終的には5つの項目を持つ配列が得られます。そのうちの2つはカンマシンボル:#,#はシンボルリテラルの表示に使用されます)。

配列を#(1 2 3)と定義する必要があります。

配列式:{1 . 2 . 3}もありますが、これは評価対象です。たとえば、{1 . 2 . 2 + 4 . a + b}は、コンパイル時に定義する必要があるため、リテラル配列#()で行うことはできません。例えば。私が使用した変数abは、コンパイル時には分かりません

5

OKです。この機会に、リテラルのより完全な説明を提供しましょう。

整数

  1. 10 
    -1 
    0 
    1000000000000000000000000000000000000000000 
    
  2. にはSmalltalkで

    進リテラルのいくつかの種類があります。
    16rAB1F 
    16r0 
    -16rFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 
    
  3. 17s0 
    3.14159265s8 
    
  4. 他ScaledDecimal

    8r7731        (octal) 
    2r1001        (binary) 
    10r99987       (decimal again!) 
    etc. 
    

文字

$A         (uppercase) 
    $a         (lowercase) 
    $         (space!) 
    $→         (unicode) 
    $1         (not to be confused with 1) 

ストリング

''         (empty string) 
    ' '         (string with 1 space) 
    'Hello world' 

シンボル

#hello 
    #'hello world' 
    #''         (empty symbol, not very useful) 
    #+ 
    #1         (not the integer 1) 

ByteArrayとして定義

#[1 2 3 4]       (separators are blank) 
    #[]         (empty ByteArray) 
    #[0 0 0 0 255]      (length is arbitrary) 

の配列

#(256 16rAB1F 3.14s2 2r1001 $A #this) 

リテラル配列はsepartorsとして空白の任意の種類と数を使用することに注意してください

#(256 
    16rAB1F 
    3.14s2 
    2r1001 
    $A #this)       (same as above) 

も注意してくださいあなたは

#[255 16rFF 8r377 2r11111111]  (four times 255) 

    #(#[1 2 3] #('string' #symbol))  (arrays of arrays) 

リテラルを構成することができ、いくつかの「公差があります*緩やかな表記へ

#(symbol) = #(#symbol)    (missing # => symbol) 

    #('string' ($a 'a'))    (missing # => array) 

しかし、ここにいない:

#([1 2 3]) ~= #(#[1 2 3])   (missing # => misinterpreted) 

しかし

#(true nil false)     (pseudo variables ok) 

しかし、ここにいません!

#(self) = #(#self)     (missing # => symbol) 

あなたは矛盾がいくつかあります見ることができるように:

が。擬似変数truefalsenilがアレイ内のリテラルとして受け入れられているが、擬似変数selfsuperは、(修飾されていない文字列のためのより一般的なルールを使用して。)シンボルとして解釈される

B。 #を書くことは必須ではありませんが(配列にネストされた配列を開始するには括弧で十分ですが、ネストされたByteArrayを開始するには#を書くことが必須です)

関連する問題