The documentation of rexxref.pdf chapter "5.1.4.12.
instanceMethods" has a documentation bug that Josep Maria referred
to (# 317, https://sourceforge.net/p/oorexx/documentation/317/)
and supplied a patch for it.
Looking into the patch and then into the example that should be
working correctly (ooRexx 5.1.0 in this case), it seems that the
method "instanceMethods" without an argument does not return the
complete list of class methods for the String class.
Here using instanceMethods on the .class objects involved for the
.string class (.object, .class, .string):
say .context~name "(".context~executable~class~id")"
say
sum=0
allMethods1=.bag~new
do clz over .Class, .Object, .String
clzMethods=ppIndexes(clz~instanceMethods(clz))
items=clzMethods~items
sum+=items
say clz~id":" items "class methods"
say clzMethods~makeString(,', ')
allMethods1=allMethods1~union(clzMethods)
say "---"
say
end
say "total of:" sum
say "allMethods1~items:" allMethods1~items
say "allMethods1:" allMethods1~allIndexes~sort~makeString(, ', ')
say
say "-"~copies(79)
clzMethods=ppIndexes(.string~instanceMethods)
allMethods2=.bag~new~union(clzMethods)
say .string~id":" clzMethods~items
say "allMethods2~items:" allMethods2~items
say clzMethods~makeString(,', ')
say
say "-"~copies(79)
say
say "allMethods2:" allMethods2~allIndexes~sort~makeString(, ', ')
say
say "allMethods1~difference(allMethods2):" allMethods1~difference(allMethods2)~makearray~sort~makeString(, ',')
say "allMethods2~difference(allMethods1):" allMethods2~difference(allMethods1)~makearray~sort~makeString(, ',')
::routine pp
return "["arg(1)"]"
::routine ppIndexes
use arg o
arrOut=.array~new
do val over o~allindexes~sort
arrOut~append(pp(val))
end
return arrOut
Running this program shows at the end the following output:
allMethods1~difference(allMethods2): [NEW]
allMethods2~difference(allMethods1):
Indeed there is a NEW method in .Object, one in .Class, and one
in .String, if querying .Object~instanceMethods(.Object),
.Class~instanceMethods(.Class), and
.String~instanceMethods(.String), totalling three NEW methods
(they are included in "allMethods1").
However .String~instanceMethods only returns two NEW methods (see
"allMethods2") instead of three, hence the discrepancy.
Why would that be?