Skip to content

Instantly share code, notes, and snippets.

var traits = {};
function trait(name, methods) {
traits[name] = methods;
}
function struct() {
var args = arguments;
// インターフェイスを作成
@hsk
hsk / after.rs
Last active August 29, 2015 14:03
trait Eq1 {
fn eq1(&self, o: &Self) -> bool;
}
trait Eq2 {
fn eq2(&self, o: &Self) -> bool;
}
struct I {i:int} impls Eq1, Eq2 {
fn eq1(&self, o: &I) -> bool { (*o).i == (*self).i }
fn eq2(&self, o: &I) -> bool { (*o).i == (*self).i }
}
@hsk
hsk / midi.scala
Last active August 29, 2015 14:00
functional midi file parser 疑似コード
// orignal code http://openpear.org/package/IO_MIDI/downloads
package midi
case class Midi(header:Header,tracks:List[Track])
trait Chunk
case class Header(format:Int,numberOfTracks:Int,divisionFlag:Int,division:Int) extends Chunk
case class Track(List[Event]) extends Chunk
trait Event
class IO_MIDI {
def classify(xts:List[('a,Type.T)], ini:'b, addf:('b,'a)=>'b, addi:('b,'a,Type.T)=>'b):'b = {
xts.foldLeft(ini) {
case (acc, (x, t)) => t match {
case Type.Unit() => acc
case Type.Float() => addf(acc, x)
case _ => addi(acc, x, t)
}
}
}