You are right. Actually, I did create the object list using list =. conew &> lst
as you explained yesterday. Unfortunately in my code, I tend to use throwaway variable names or single letters, so I didn't copy-paste into the email, I rewrote everything from scratch using nicer names, and missed this part out. Apologies. Also, thanks for explaining 'inl' yesterday, but I was wondering if there was another way to call an object's function from a list without getting the current locale involved. Regards. > Date: Wed, 4 Jun 2014 08:46:14 -0700 > From: [email protected] > To: [email protected] > Subject: Re: [Jprogramming] More Object List Questions > > I answered your questions about objectlists yesterday. you need to use the > verb inl. > > What you've done below is just create 5 boxed strings 'Account'. These are > not locales. > > When you create "objects" the return values look like boxed numbers (though > they are strings of numbers). If your list doesn't hold numbers, then it > doesn't contain object instances (numbered locales). If your list has 5 > identical numbers, then it is 5 references to the same object. > > You have to read these... maybe again every day until more of it gets > absorbed. > > http://www.jsoftware.com/help/jforc/modular_code.htm#_Toc191734482 > http://www.jsoftware.com/jwiki/Vocabulary/Locales > > working with lists of objects is fairly advanced with no tutorials for doing > so. You should only tackle it after you have mastered getting one object > working. > > > ----- Original Message ----- > From: Jon Hough <[email protected]> > To: "[email protected]" <[email protected]> > Cc: > Sent: Wednesday, June 4, 2014 11:16:40 AM > Subject: [Jprogramming] More Object List Questions > > I hope I'm not spamming the forum with my questions. > I am still getting my head around OOP in J. > My class: > > coclass 'Account' > > create =: verb define > balance =: 0 > fname =: '' > lname =: '' > ) > It's just a dummy 'Account' class with balance, first name and last name. > I want to create several objects in a list: > > list =. 5 $ < 'Account' > > list > > ┌───────┬───────┬───────┬───────┬───────┐│Account│Account│Account│Account│Account│└───────┴───────┴───────┴───────┴───────┘ > > So I have my list of 5 Accounts. Now I want to be able to access their > fields, functions by indexing the list. > e.g. in Java if I have an array of Accounts > Account[] accounts = new Account[5]; > I can access the fields from the array index: > for(int i = 0; i<5; i++){ > accounts[i].fname = "No name given"; > } > In J, > I tried the following: > create__(1{list) > |value error: create__ > | create__(1{list) > I tried to call the create function of the 2nd Account (index 1) of th elist. > It seems I can't append 1{list to create__. > Next I thought about making a function to do the work for me: > NB. function to return y's fname... > func =: verb define acct =. y name =: fname__acct name > ) > The above function assumes y is an instance of Account. > Alas, func 1{list doesn't work. > However if I do: > acct =: 1{list > func acct > This will return the fname. > But I have to explicitly define acct, which is not particularly terse. Is > there a way to call functions from the list of objects? > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
