From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Joe Riel Newsgroups: gmane.emacs.help Subject: Re: eieio defclass evaluate :initform value Date: Thu, 5 Jan 2017 08:06:54 -0800 Message-ID: <20170105080654.7fdeac91@gauss> References: <20170104120403.6e7c67e8@gauss> <87o9zm7dwd.fsf@ericabrahamsen.net> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1483633308 30946 195.159.176.226 (5 Jan 2017 16:21:48 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 5 Jan 2017 16:21:48 +0000 (UTC) Cc: help-gnu-emacs@gnu.org To: Eric Abrahamsen Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Jan 05 17:21:41 2017 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cPAnM-00078m-Ed for geh-help-gnu-emacs@m.gmane.org; Thu, 05 Jan 2017 17:21:40 +0100 Original-Received: from localhost ([::1]:47268 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cPAnQ-00047e-H0 for geh-help-gnu-emacs@m.gmane.org; Thu, 05 Jan 2017 11:21:44 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40784) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cPAZA-0000Ux-0g for help-gnu-emacs@gnu.org; Thu, 05 Jan 2017 11:07:01 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cPAZ6-00018l-Q8 for help-gnu-emacs@gnu.org; Thu, 05 Jan 2017 11:06:59 -0500 Original-Received: from cdptpa-outbound-snat.email.rr.com ([107.14.166.230]:19743 helo=cdptpa-oedge-vip.email.rr.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cPAZ6-00018S-Ly for help-gnu-emacs@gnu.org; Thu, 05 Jan 2017 11:06:56 -0500 Original-Received: from [75.80.191.41] ([75.80.191.41:32772] helo=gauss) by cdptpa-omsmta03 (envelope-from ) (ecelerity 3.6.9.48312 r(Core:3.6.9.0)) with ESMTP id 17/D6-05528-F1F6E685; Thu, 05 Jan 2017 16:06:55 +0000 In-Reply-To: <87o9zm7dwd.fsf@ericabrahamsen.net> X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.25; x86_64-pc-linux-gnu) X-RR-Connecting-IP: 107.14.168.88:25 X-detected-operating-system: by eggs.gnu.org: BaiduSpider [fuzzy] X-Received-From: 107.14.166.230 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.org gmane.emacs.help:112054 Archived-At: On Wed, 04 Jan 2017 12:45:22 -0800 Eric Abrahamsen wrote: > Joe Riel writes: > > > According to the info page for eieio for Emacs 23, one > > could do > > > > (defclass foo-class > > ((bar :initform (lambda () my-var) > > :type string))) > > > > When make-instance was called, the lambda expression > > for :initform would be evaluated and the expression > > assigned to my-var would be used for the slot bar. > > > > The info page for eieio Emacs 24 does not mention this > > functionality and testing shows it no longer exists. > > > > Is there nice way, in 24, to create a class with an :initform > > that, upon instantiation, evaluates to the value of a variable? > > Depending on what exactly you want, you might be able to solve it with > `oset-default', which lives outside the class definition, and can > evaluate variables. See if that does what you want? Thanks, Eric; I wasn't aware of oset-default and could use it, however, am currently taking a different approach. The bigger picture is that I'm using a buffer-local object to store configuration data for a major mode. The object is normally updated when the mode is invoked, but the global defaults should be configurable. The current approach is to clone a default object whose values can be assigned via a customization. The documentation for using defcustom with an eieio object is slim, but I got it working. -- Joe Riel