Many thanks Oliver. I had found the sample in the manual, but has confused
myself when trying to transfer it to my own code.
I have now been able to create some sample code of my own using the
information you have provided and I believe I understand more (but not
enough) of how the OO environment works
Eric
On 29 December 2011 23:48, Oliver Sims <oliver.s...@simsassociates.co.uk>wrote:
> **
> Hi Eric,
>
> Don't know if I can help, but I agree that using attributes is not quite
> as clear in the documentation as it might be (although there's an example
> of validation on page 82 of the ooRexx Reference). Now I don't claim to
> be an expert on attributes, but I do know that OO languages/software have
> many ways of implementing the attribute concept. The ooRexx approach, once
> you get used to it, is imho rather nice.
>
> The following code aims to provide some examples of using attributes -
> both defining them in a class called "MainlyAttributes" and getting/setting
> then from outside the class.
> Each of the three attributes in the class is defined slightly differently
> to indicate the range of options available. Hope this helps.
>
>
> /* Check out Attributes
>
> A class with three attributes - x, y, and z, each specified differently:
> x is fully spec'd using the ::attribute directive for both get and set.
> Note the "set" code provided with the ::attribute directive. This code
> constrains the value to be a numeric whole positive number and is
> taken
> from the ooRexx Reference (page 82).
> y uses the ::attribute statement for gets only; the set is provided as a
> specific method called "y=". This method checks for numeric and
> returns
> either .true or .false. Note that the returned value must be checked
> using
> the "result" special variable. If ,false is returned, the value of y
> is set
> to the string "Not Set".
> z uses a single ::attribute directive with default get/set bevavior.
>
> */
>
> i = .MainlyAttributes~new
>
> say; say "-----------------Attributes Test----------------------------"
>
> -- Get initial values of all three attributes:
> say "Initial values of attributes assigned in the 'init' method:"
> say "x=" i~x " y=" i~y " z=" i~z
>
> say; say "Set x to 123 with the statement 'i~x = 123'."
> i~x = 123
> say "x is now:" i~x
>
> say; say "Invoke a method that 'gets' all three attributes:"
> i~getAllThree
>
> say; say "Set y to an invalid value ..."
> say "Invalid: i~y='abc'"
> i~y='abc'
> say "Result =" result
> say "... and now to a valid value:"
> say "Valid: i~y=100"
> i~y=100
> say "Result =" result
>
> say; say "Set z to a different value using i~z='xyz'"
> i~z='xyz'
> say "z =" i~z
>
> say; say "Set x to a valid numeric value using i~x=123"
> i~x = 123;
> say "i~x =" i~x
>
> say; say "Set x to a non-numeric value. This will raise an error and exit."
> say "But it's the last example in this program, so an exit here is OK."
> i~x = "abc"
>
>
> --
> -----------------------------------------------------------------------------
> ::class MainlyAttributes
>
> ::attribute x get
> ::attribute x set
> expose x
> use arg value
> -- Prevent x having a value that is not a whole number by throwing an
> error
> -- and exiting if x is assigned a bad value:
> if datatype(value, "Whole") = .false | value < 0 then
> raise syntax 93.906 array ("x", value)
> x = value
> return 1
>
> ::attribute y get
>
> ::attribute z
>
> ::method init
> expose x y z
> x = 0
> y = ""
> z = "abc"
>
> ::method getAllThree
> expose x y z
> say "x =" x
> say "y =" y
> say "z =" z
>
> ::method "y=" -- equivalent to ::attribute y set
> expose y
> use arg a
> if a~datatype("N") then do
> y = a
> return .true
> end
> y = ""
> return .false
>
> --
> -----------------------------------------------------------------------------
>
>
>
>
> ------------------------------
> *From:* Eric Davidson [mailto:eric-david...@bigfoot.com]
> *Sent:* 28 December 2011 16:32
> *To:* oorexx-users@lists.sourceforge.net
> *Subject:* [Oorexx-users] ::attribute validation
>
> As an ex-mainframe person who has been using REXX extensively for over 20
> years, and using ooRexx procedurally for the last 5. I am trying to update
> myself to develop code using the OO techniques.
>
> I have read the documentation and I believe I understand the basics of
> methods, but I am currently stuck using attributes - specifically how to
> validate the values an attribute can have.
>
> I can't seem to find simple examples of creating methods and validating.
>
> Apologies if this is a basic question that I should have referred elsewhere
>
> Eric Davidson
>
------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual
desktops for less than the cost of PCs and save 60% on VDI infrastructure
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
Oorexx-users mailing list
Oorexx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-users