Search code examples
syntaxconstructorsupercollider

SuperCollider * marking the constructor method is not expected


I tried to create a Class and the constructor always gave me a Syntax Error about the *new method then I just copied the Example from the documentation:

MyClass {

  // this is a normal constructor method
  *new { | arga, argb, argc |
      ^super.new.init(arga, argb, argc)
   }

   init { | arga, argb, argc |
      // do initiation here
   }
}

and still got this:

ERROR: syntax error, unexpected '*', expecting '}'
 in interpreted text
  line 6 char 5:
  
*new { | arga, argb, argc |
^
    ^super.new.init(arga, argb, argc)
-----------------------------------
ERROR: Command line parse failed
-> nil

From my own class i get the same error concerning the constructor. Where am I wrong?


Solution

  • If you check out the Writing Classes helpfile, there's a bit at the top that's easy to miss about where to save your classes.

    https://depts.washington.edu/dxscdoc/Help/Guides/WritingClasses.html

    NOTE: Class definitions are statically compiled when you launch SuperCollider or "recompile the library." This means that class definitions must be saved into a file with the extension .sc, in a disk location where SuperCollider looks for classes. Saving into the main class library (SCClassLibrary) is generally not recommended. It's preferable to use either the user or system extension directories.

    Platform.userExtensionDir;   // Extensions available only to your user account
    
    Platform.systemExtensionDir; // Extensions available to all users on the machine
    

    It is not possible to enter a class definition into an interpreter window and execute it.

    The the Save As Extension option under the file menu. Then recompile the interpretter and try using your class.