2017-09-13 7 views
0

ボタンを作成する関数を作成しようとしています( "クリーン"なコードを保ちます)。ボタンを作成する機能

(
Window.closeAll; 

~w = Window.new(
    name: "Xylophone", 
    resizable: true, 
    border: true, 
    server: s, 
    scroll: false); 

~w.alwaysOnTop = true; 

/** 
* Function that creates a button. 
*/ 
createButtonFunc = { 
    | 
     l = 20, t = 20, w = 40, h = 190, // button position 
     nameNote = "note", // button name 
     freqs // frequency to play 
    | 

    Button(
     parent: ~w, // the parent view 
     bounds: Rect(left: l, top: t, width: w, height: h) 
    ) 
    .states_([[nameNote, Color.black, Color.fromHexString("#FF0000")]]) 
    .action_({Synth("xyl", [\freqs, freqs])}); 
} 
) 


(
SynthDef("xyl", { 
    | 
     out = 0, // the index of the bus to write out to 
     freqs = #[410], // array of filter frequencies 
     rings = #[0.8] // array of 60 dB decay times in seconds for the filters 
    | 

    ... 
) 

エラーは次のとおりです:ERROR:変数 'c​​reateButtonFunc' はを定義していない。ここ

はコードです。 なぜですか?

申し訳ありませんが、私は初心者です。

ありがとうございます!

答えて

1

おそらくこれには少し遅れていますが、これは同じ質問をしている人に役立つことを願っています。

エラーが表示されるのは、宣言される前に変数名を使用しているためです。インタプリタは、それが知っている何か他のものにその名前と一致することはできませんので、言い換えれば

、あなたが自分自身で

variableName

を評価しようとした場合、あなたは常に、エラーになります。これを解決するには、グローバルインタプリタ変数(a - z)、環境変数(~createButtonFuncなど)を使用するか、コード内で先にvar createButtonFuncと宣言します。この最後の1つは、そのチャンクを解釈した後にその変数名にアクセスすることができないことを意味します。これは良いことかもしれません。後でアクセスできるようにしたい場合は、~createButtonFuncと書くのが最も理にかなっていると思います。

ところで、~wの代わりにwを使用することができます。一文字の変数名はデフォルトではグローバルであり、それは慣用的な使い方です。

-brian

関連する問題