亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ChucK初步(4)

2019-11-14 09:57:31
字體:
來源:轉載
供稿:網友

arrays

declaringmulti-dimensionallookupassociative arraysassignment

Arrays

This sections specifies(指定) how arrays are declared and used in ChucK. Some quick notes: * arrays can be indexed by integer(整數) (0-indexed). * any array can also be used as an associative(聯想的) map, indexed by strings. * it is important to note that the integer-indexed portion(部分) and the associative portion of an array are stored in separate namespaces * arrays are objects, and will behave similarly under reference assignment(引用賦值) and other Operations common to objects.

declaration

Arrays(數組) can be declared in the following way:

// declare 10 element array of int, called fooint foo[10];// since array of int (PRimitive type), the contents// are automatically initialized to 0

Arrays can also be initialized(初始化):

// chuck intializer(初始化器,程序) to array reference[ 1, 1, 2, 3, 5, 8 ] @=> int foo[];

In the above code, there are several things to note: * initializers must contain the same or similar types. the compiler(編譯器) will attempt to find the highest common base type of all the elements(元素). if no such common element is found, an error is reported. * the type of the initializer [ 1, 1, 2, 3, 5, 8 ] is int[]. the intializer is an array that can be used directly when arrays are expected. * the at-chuck operator (@=>) means assignment(分配), and is discussed at length(詳細地) in operators and operations. * int foo[] is declaring an empty reference(引用) to an array(數組). the statement(聲明) assigns(分配) the initializer array to foo. * arrays are objects.

When declaring an array of objects, the objects inside the array are automatically(自動的) instantiated(實例化).

// objects in arrays are automatically instantiatedObject group[10];

If you only want an array of object references:(對象引用數組)

// array of null object referencesObject @ group[10];

Check here more information on object declaration and instantation in Chuck.

The above examples are 1-dimensional arrays (or vectors(矢量)).

multi-dimensional arrays

It is possible (and equally easy) to declare multi-dimensional arrays:

// declare 4 by 6 by 8 array of floatfloat foo3D[4][6][8];//和C還是很像

Initializers work in similar ways:

// declare 2 by 2 array of int[ [1,3], [2,4] ] @=> int bar[][];

In the above code, note the two [][] since we make a matrix.

lookup

Elements in an array can be accessed using [] /(in the appropriate quantities).

// declare an array of floats[ 3.2, 5.0, 7 ] @=> float foo[];// access the 0th element (debug print)<<< foo[0] >>>; // hopefully 3.2// set the 2nd element8.5 => foo[2];

Looping over the elements of an array:

// array of floats again[ 1, 2, 3, 4, 5, 6 ] @=> int foo[];//官方的例子這里是float,但是實際測試,整型不可以被分配到float里。// loop over the entire arrayfor( 0 => int i; i < foo.cap(); i++ )//foo.cap(){ // do something (debug print) <<< foo[i] >>>;//自帶換行}

Accessing multi-dimensional array:

// 2D arrayint foo[4][4];// set an element10 => foo[2][2];

If the index exceeds(超過) the bounds of the array in any dimension(標出尺寸), an exception(異常) is issued(被放出) and the current shred(片段) is halted(停止).

// array capacity is 5int foo[5];// this should cause ArrayOutOfBoundsException// access element 6 (index 5)<<< foo[5] >>>;

a longer program: otf_06.ck from examples:

// the period.5::second => dur T;// synchronize to period (for on-the-fly(運行中) synchronization)T - (now % T) => now;// our patchSinOsc s => JCRev r => dac;//JCRev是指什么類型?// initialize.05 => s.gain;.25 => r.mix;// scale (pentatonic(五音階的); in semitones(半音程))[ 0, 2, 4, 7, 9 ] @=> int scale[];// infinite time loopwhile( true ){ // pick something from the scale scale[ Math.rand2(0,4) ] => float freq; // get the final freq Std.mtof( 69 + (Std.rand2(0,3)*12 + freq) ) => s.freq; // reset phase for extra bandwidth(為額外帶寬重置相位) 0 => s.phase; // advance time if( Std.randf() > -.5 ) .25::T => now; else .5::T => now;}

associative arrays(關聯數組)

(類似于python中的字典,用字符串索引)

Any array(數組) can be used also as an associative array, indexed on strings. Once the regular array is instantiated, no further work has to be done to make it associative as well - just start using it as such.

// declare regular array(正規數組) (capacity(容量) doesn't matter so much)float foo[4];// use as int-based array2.5 => foo[0];// use as associative array4.0 => foo["yoyo"];// access as associative (print)<<< foo["yoyo"] >>>;// access empty element<<< foo["gaga"] >>>; // -> should print 0.0

It is important to note (again), that the address space of the integer(整數) portion(部分) and the associative portion of the array are completely separate. For example:

// declare arrayint foo[2];// put something in element 010 => foo[0];// put something in element "0"20 => foo["0"];// this should print out 10 20<<< foo[0], foo["0"] >>>;

The capacity(容量) of an array relates only to the integer portion of it. An array with an integer portion of capacity 0, for example, can still have any number of associative indexes.

// declare array of 0 capacityint foo[0];// put something in element "here"20 => foo["here"];// this should print out 20<<< foo["here"] >>>// this should cause an exception<<< foo[0] >>>

Note: The associative capacity of an array is not defined(定義), so objects used in the associative namespace must be explicitly(明確的) instantiated, in contrast(對比) to those in the integer namespace (此處不甚明白)

Accessing an uninstantiated element(元素) of the associate array will return a null reference. Please check the class documentation page for an explanation of ChucK objects and references.

class Item { float weight; }Item box[10]; // integer indices(指數;目錄(index的復數)) ( up to capacity ) are pre-instantiated.1.2 => box[1].weight; // instantiate element "lamp";new Item @=> box["lamp"]; // access allowed to "lamp"2.0 => box["lamp"].weight; // access causes a `NullPointerException` 2.0 => box["sweater"].weight;

array assignment

Arrays are objects. So when we declare an array, we are actually

(1) declaring a reference to array (reference variable(引用變量))(2) instantiating a new array and reference assigned(分配) to the variable.

A (null) reference is a reference variable that points to no object or null. A null reference to an array can be created in this fashion:

// declare array reference (by not specifying(指定) a capacity)int foo[];// we can now assign any int[] to foo[ 1, 2, 3 ] @=> foo;// print out 0th element<<< foo[0] >>>;

This is also useful in declaring functions that have arrays(數組) as arguments or return type.

// our functionfun void print( int bar[] ){ // print it for( 0 => int i; i < bar.cap(); i++ ) <<< bar[0] >>>;}// we can call the function with a literalprint( [ 1, 2, 3, 4, 5 ] );// or can we can pass a reference variableint foo[10];print( foo );

Like other objects, it is possible make multiple references(多個引用) to a single array. Like other objects, all assignments(分配) are reference assignments, meaning the contents are NOT copied, only a reference to array is duplicated(被復制).(傳遞引用)

// our single arrayint the_array[10];// assign reference to foo and barthe_array => int foo[] => int bar[];// (the_array, foo, and bar now all reference the same array)// we change the_array and print foo...// they reference the same array, changing one is like changing the other// 連鎖反應,內存中的存儲信息改變了5 => the_array[0];<<< foo[0] >>>; // should be 5

It is possible to reference sub-sections(小節) of multi-dimensional(多維) arrays.

// a 3D arrayint foo3D[4][4][4];// we can make a reference to a sub-sectionfoo3D[2] => int bar[][];// (note that the dimensions must add up!)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69精品小视频| 亚洲欧美日韩高清| 国产精品久久久久久久久影视| 日韩有码视频在线| 国产精品久久久久高潮| 国产精品久久网| 日韩美女视频免费在线观看| 久久亚洲影音av资源网| 欧美大成色www永久网站婷| 国产mv免费观看入口亚洲| 亚洲精品999| 午夜精品久久久久久久99热浪潮| 国产欧美日韩精品丝袜高跟鞋| 中文字幕免费精品一区| 伊人久久男人天堂| 久久久久亚洲精品| 成人有码视频在线播放| 日韩av一区在线| 久久久99免费视频| 亚洲一区中文字幕在线观看| 青草青草久热精品视频在线网站| 中文字幕亚洲欧美一区二区三区| 久久成人18免费网站| 亚洲成人性视频| 欧美大尺度在线观看| 欧美激情视频一区二区三区不卡| 成人激情春色网| 午夜精品久久17c| 91在线国产电影| 国产亚洲日本欧美韩国| 5278欧美一区二区三区| 日韩欧美在线第一页| 欧美极品美女电影一区| 91久久久久久久一区二区| 激情懂色av一区av二区av| 97视频在线观看视频免费视频| 亚洲aⅴ男人的天堂在线观看| 亚洲精品一区二区网址| 久久精品视频在线播放| 亚洲精品影视在线观看| 国内免费久久久久久久久久久| 国产精品福利在线观看| 欧美日韩国产一中文字不卡| 亚洲欧美三级在线| 亚洲欧洲国产一区| 日韩av男人的天堂| 亚洲精品v天堂中文字幕| 亚洲男人天堂网站| 久久91超碰青草是什么| 久久久国产视频| 亚洲网站在线看| 欧美丰满少妇xxxxx做受| 91久久久久久久久久久| 亚洲最新av网址| 日韩免费电影在线观看| 亚洲精品电影网在线观看| 久久久久久久久久久成人| 91中文字幕在线观看| 亚洲小视频在线观看| 亚洲一区二区三区乱码aⅴ| 国产91久久婷婷一区二区| 亚洲一区二区三| 91精品国产自产91精品| 自拍偷拍亚洲精品| 久久偷看各类女兵18女厕嘘嘘| 国产有码在线一区二区视频| 国产精品视频一区二区三区四| 国产一区二区三区在线播放免费观看| 国产欧美精品一区二区| 97av在线影院| 热99在线视频| 精品动漫一区二区| 国产精品r级在线| 久久色在线播放| 国产精品视频精品视频| 久久九九有精品国产23| 欧美性色视频在线| 久久久久久综合网天天| 欧美高跟鞋交xxxxhd| 久久人人爽人人爽人人片亚洲| 91精品国产91久久久久久| 成人网在线免费看| 亚洲天堂网站在线观看视频| 国产精品美女主播在线观看纯欲| 91精品国产乱码久久久久久蜜臀| 国产精品成人av性教育| 欧美电影在线免费观看网站| 国模视频一区二区三区| 精品性高朝久久久久久久| 久久99国产精品久久久久久久久| 午夜精品一区二区三区在线| 亚洲国产毛片完整版| 亚洲国产精彩中文乱码av在线播放| 日韩69视频在线观看| 亚洲国产精品999| 91精品国产自产在线| 日韩中文字幕欧美| 日本最新高清不卡中文字幕| 国产成人免费av电影| 日本精品免费一区二区三区| 81精品国产乱码久久久久久| 91亚洲精品视频| 亚洲精品视频网上网址在线观看| 日韩在线中文视频| 日韩成人在线电影网| 在线观看免费高清视频97| 国产成人自拍视频在线观看| 日韩乱码在线视频| 欧美激情成人在线视频| 亚洲免费电影在线观看| 欧美最猛性xxxxx亚洲精品| 热门国产精品亚洲第一区在线| 5566日本婷婷色中文字幕97| 亚洲国语精品自产拍在线观看| 欧美性猛交xxxx免费看| 亚洲精品在线不卡| 日本久久精品视频| 欧美二区乱c黑人| 欧美午夜激情小视频| 欧美日本啪啪无遮挡网站| 久久天天躁夜夜躁狠狠躁2022| 国产69精品久久久久9999| 欧美激情网友自拍| 免费99精品国产自在在线| 久久久这里只有精品视频| 丰满岳妇乱一区二区三区| 日韩有码片在线观看| 亚洲视频在线观看网站| 91精品91久久久久久| 国产精品91久久| 91精品国产综合久久男男| 色妞一区二区三区| 亚洲人av在线影院| 精品国产自在精品国产浪潮| 亚洲国产精品999| 欧美色道久久88综合亚洲精品| 精品久久久久久中文字幕一区奶水| 中文字幕日韩欧美精品在线观看| 5566日本婷婷色中文字幕97| 精品国产一区二区三区久久久狼| 97久久伊人激情网| 亚洲综合在线中文字幕| 欧美在线一区二区视频| 2019中文字幕在线免费观看| 一区二区三欧美| 日本一区二区不卡| 欧美电影《睫毛膏》| 日韩视频在线免费观看| 91精品视频免费| 欧美日韩亚洲精品一区二区三区| 久久躁狠狠躁夜夜爽| 这里只有精品视频| 欧美裸体xxxx极品少妇软件| 日韩亚洲精品电影| 国产成人精品电影久久久| 大胆欧美人体视频| 久久亚洲精品一区| 国产精品人成电影| 国产精品久久久久久久av电影| 性欧美暴力猛交69hd| 欧美大码xxxx| 国产精品成av人在线视午夜片| 欧美成人中文字幕在线| 欧美日韩中文字幕在线视频|