Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
6
Task/Reflection-List-properties/00-META.yaml
Normal file
6
Task/Reflection-List-properties/00-META.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
category:
|
||||
- Programming Tasks
|
||||
- Object oriented
|
||||
from: http://rosettacode.org/wiki/Reflection/List_properties
|
||||
note: Reflection
|
||||
5
Task/Reflection-List-properties/00-TASK.txt
Normal file
5
Task/Reflection-List-properties/00-TASK.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
;Task:
|
||||
The goal is to get the properties of an object, as names, values or both.
|
||||
|
||||
Some languages support dynamic properties, which in general can only be inspected if a class' public API includes a way of listing them.
|
||||
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
public static class Reflection
|
||||
{
|
||||
public static void Main() {
|
||||
var t = new TestClass();
|
||||
var flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
|
||||
foreach (var prop in GetPropertyValues(t, flags)) {
|
||||
Console.WriteLine(prop);
|
||||
}
|
||||
foreach (var field in GetFieldValues(t, flags)) {
|
||||
Console.WriteLine(field);
|
||||
}
|
||||
}
|
||||
|
||||
public static IEnumerable<(string name, object value)> GetPropertyValues<T>(T obj, BindingFlags flags) =>
|
||||
from p in typeof(T).GetProperties(flags)
|
||||
where p.GetIndexParameters().Length == 0 //To filter out indexers
|
||||
select (p.Name, p.GetValue(obj, null));
|
||||
|
||||
public static IEnumerable<(string name, object value)> GetFieldValues<T>(T obj, BindingFlags flags) =>
|
||||
typeof(T).GetFields(flags).Select(f => (f.Name, f.GetValue(obj)));
|
||||
|
||||
class TestClass
|
||||
{
|
||||
private int privateField = 7;
|
||||
public int PublicNumber { get; } = 4;
|
||||
private int PrivateNumber { get; } = 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
import std.stdio;
|
||||
|
||||
struct S {
|
||||
bool b;
|
||||
|
||||
void foo() {}
|
||||
private void bar() {}
|
||||
}
|
||||
|
||||
class C {
|
||||
bool b;
|
||||
|
||||
void foo() {}
|
||||
private void bar() {}
|
||||
}
|
||||
|
||||
void printProperties(T)() if (is(T == class) || is(T == struct)) {
|
||||
import std.stdio;
|
||||
import std.traits;
|
||||
|
||||
writeln("Properties of ", T.stringof, ':');
|
||||
foreach (m; __traits(allMembers, T)) {
|
||||
static if (__traits(compiles, (typeof(__traits(getMember, T, m))))) {
|
||||
alias typeof(__traits(getMember, T, m)) ti;
|
||||
static if (!isFunction!ti) {
|
||||
writeln(" ", m);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
printProperties!S;
|
||||
printProperties!C;
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
import system'routines;
|
||||
import system'dynamic;
|
||||
import extensions;
|
||||
|
||||
class MyClass
|
||||
{
|
||||
prop int X;
|
||||
prop string Y;
|
||||
}
|
||||
|
||||
public program()
|
||||
{
|
||||
var o := new MyClass
|
||||
{
|
||||
this X := 2;
|
||||
|
||||
this Y := "String";
|
||||
};
|
||||
|
||||
MyClass.__getProperties().forEach:(p)
|
||||
{
|
||||
console.printLine("o.",p,"=",cast MessageName(p).getPropertyValue(o))
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
USING: assocs kernel math mirrors prettyprint strings ;
|
||||
|
||||
TUPLE: foo
|
||||
{ bar string }
|
||||
{ baz string initial: "hi" }
|
||||
{ baxx integer initial: 50 read-only } ;
|
||||
C: <foo> foo
|
||||
|
||||
"apple" "banana" 200 <foo> <mirror>
|
||||
[ >alist ] [ object-slots ] bi [ . ] bi@
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// A type definition
|
||||
type t struct {
|
||||
X int
|
||||
next *t
|
||||
}
|
||||
|
||||
func main() {
|
||||
report(t{})
|
||||
report(image.Point{})
|
||||
}
|
||||
|
||||
func report(x interface{}) {
|
||||
t := reflect.TypeOf(x)
|
||||
n := t.NumField()
|
||||
fmt.Printf("Type %v has %d fields:\n", t, n)
|
||||
fmt.Println("Name Type Exported")
|
||||
for i := 0; i < n; i++ {
|
||||
f := t.Field(i)
|
||||
fmt.Printf("%-8s %-8v %-8t\n",
|
||||
f.Name,
|
||||
f.Type,
|
||||
f.PkgPath == "",
|
||||
)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
import java.lang.reflect.Field
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
class ListProperties {
|
||||
public int examplePublicField = 42
|
||||
private boolean examplePrivateField = true
|
||||
|
||||
static void main(String[] args) {
|
||||
ListProperties obj = new ListProperties()
|
||||
Class clazz = obj.class
|
||||
|
||||
println "All public fields (including inherited):"
|
||||
(clazz.fields).each { Field f ->
|
||||
printf "%s\t%s\n", f, f.get(obj)
|
||||
}
|
||||
println()
|
||||
|
||||
println "All declared fields (excluding inherited):"
|
||||
clazz.getDeclaredFields().each { Field f ->
|
||||
f.accessible = true
|
||||
printf "%s\t%s\n", f, f.get(obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
import java.lang.reflect.Field;
|
||||
|
||||
public class ListFields {
|
||||
public int examplePublicField = 42;
|
||||
private boolean examplePrivateField = true;
|
||||
|
||||
public static void main(String[] args) throws IllegalAccessException {
|
||||
ListFields obj = new ListFields();
|
||||
Class clazz = obj.getClass();
|
||||
|
||||
System.out.println("All public fields (including inherited):");
|
||||
for (Field f : clazz.getFields()) {
|
||||
System.out.printf("%s\t%s\n", f, f.get(obj));
|
||||
}
|
||||
System.out.println();
|
||||
System.out.println("All declared fields (excluding inherited):");
|
||||
for (Field f : clazz.getDeclaredFields()) {
|
||||
System.out.printf("%s\t%s\n", f, f.get(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
var obj = Object.create({
|
||||
name: 'proto',
|
||||
proto: true,
|
||||
doNothing: function() {}
|
||||
}, {
|
||||
name: {value: 'obj', writable: true, configurable: true, enumerable: true},
|
||||
obj: {value: true, writable: true, configurable: true, enumerable: true},
|
||||
'non-enum': {value: 'non-enumerable', writable: true, enumerable: false},
|
||||
doStuff: {value: function() {}, enumerable: true}
|
||||
});
|
||||
|
||||
// get enumerable properties on an object and its ancestors
|
||||
function get_property_names(obj) {
|
||||
var properties = [];
|
||||
for (var p in obj) {
|
||||
properties.push(p);
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
|
||||
get_property_names(obj);
|
||||
//["name", "obj", "doStuff", "proto", "doNothing"]
|
||||
|
||||
Object.getOwnPropertyNames(obj);
|
||||
//["name", "obj", "non-enum", "doStuff"]
|
||||
|
||||
Object.keys(obj);
|
||||
//["name", "obj", "doStuff"]
|
||||
|
||||
Object.entries(obj);
|
||||
//[["name", "obj"], ["obj", true], ["doStuff", function()]]
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
# Use jq's built-ins to generate a (recursive) synopsis of .
|
||||
def synopsis:
|
||||
if type == "boolean" then "Type: \(type)"
|
||||
elif type == "object"
|
||||
then "Type: \(type) length:\(length)",
|
||||
(keys_unsorted[] as $k
|
||||
| "\($k): \(.[$k] | synopsis )")
|
||||
else "Type: \(type) length: \(length)"
|
||||
end;
|
||||
|
||||
true, null, [1,2], {"a": {"b": 3, "c": 4}, "x": "Rosetta Code"}, now
|
||||
| ("\n\(.) ::", synopsis)
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
for obj in (Int, 1, 1:10, collect(1:10), now())
|
||||
println("\nObject: $obj\nDescription:")
|
||||
dump(obj)
|
||||
end
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// version 1.1
|
||||
|
||||
import kotlin.reflect.full.memberProperties
|
||||
import kotlin.reflect.jvm.isAccessible
|
||||
|
||||
open class BaseExample(val baseProp: String) {
|
||||
protected val protectedProp: String = "inherited protected value"
|
||||
}
|
||||
|
||||
class Example(val prop1: String, val prop2: Int, baseProp: String) : BaseExample(baseProp) {
|
||||
private val privateProp: String = "private value"
|
||||
|
||||
val prop3: String
|
||||
get() = "property without backing field"
|
||||
|
||||
val prop4 by lazy { "delegated value" }
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val example = Example(prop1 = "abc", prop2 = 1, baseProp = "inherited public value")
|
||||
val props = Example::class.memberProperties
|
||||
for (prop in props) {
|
||||
prop.isAccessible = true // makes non-public properties accessible
|
||||
println("${prop.name.padEnd(13)} -> ${prop.get(example)}")
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
obj = script("MyClass").new()
|
||||
obj.foo = 23
|
||||
obj.bar = 42
|
||||
|
||||
-- ...
|
||||
|
||||
-- show obj's property names and values
|
||||
cnt = obj.count
|
||||
repeat with i = 1 to cnt
|
||||
put obj.getPropAt(i)&" = "&obj[i]
|
||||
end repeat
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
a = 1
|
||||
b = 2.0
|
||||
c = "hello world"
|
||||
|
||||
function listProperties(t)
|
||||
if type(t) == "table" then
|
||||
for k,v in pairs(t) do
|
||||
if type(v) ~= "function" then
|
||||
print(string.format("%7s: %s", type(v), k))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
print("Global properties")
|
||||
listProperties(_G)
|
||||
print("Package properties")
|
||||
listProperties(package)
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
// declare a class that has fields to be listed
|
||||
class Fields
|
||||
declare static field1 = "this is a static field. it will not be listed"
|
||||
declare field2
|
||||
declare field3
|
||||
declare field4
|
||||
end
|
||||
|
||||
// list all the fields in the class
|
||||
for fieldname in Fields.getFieldNames()
|
||||
println fieldname
|
||||
end
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
type
|
||||
Foo = object
|
||||
a: float
|
||||
b: string
|
||||
c: seq[int]
|
||||
let f = Foo(a: 0.9, b: "hi", c: @[1,2,3])
|
||||
for n, v in f.fieldPairs:
|
||||
echo n, ": ", v
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
#import <Foundation/Foundation.h>
|
||||
#import <objc/runtime.h>
|
||||
|
||||
@interface Foo : NSObject {
|
||||
int exampleIvar;
|
||||
}
|
||||
@property (nonatomic) double exampleProperty;
|
||||
@end
|
||||
@implementation Foo
|
||||
- (instancetype)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
exampleIvar = 42;
|
||||
_exampleProperty = 3.14;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@end
|
||||
|
||||
int main() {
|
||||
id obj = [[Foo alloc] init];
|
||||
Class clazz = [obj class];
|
||||
|
||||
NSLog(@"\Instance variables:");
|
||||
unsigned int ivarCount;
|
||||
Ivar *ivars = class_copyIvarList(clazz, &ivarCount);
|
||||
for (unsigned int i = 0; i < ivarCount; i++) {
|
||||
Ivar ivar = ivars[i];
|
||||
const char *name = ivar_getName(ivar);
|
||||
const char *typeEncoding = ivar_getTypeEncoding(ivar);
|
||||
// for simple types we can use Key-Value Coding to access it
|
||||
// but in general we will have to use object_getIvar and cast it to the right type of function
|
||||
// corresponding to the type of the instance variable
|
||||
id value = [obj valueForKey:@(name)];
|
||||
NSLog(@"%s\t%s\t%@", name, typeEncoding, value);
|
||||
}
|
||||
free(ivars);
|
||||
|
||||
NSLog(@"");
|
||||
NSLog(@"Properties:");
|
||||
unsigned int propCount;
|
||||
objc_property_t *properties = class_copyPropertyList([Foo class], &propCount);
|
||||
for (unsigned int i = 0; i < propCount; i++) {
|
||||
objc_property_t p = properties[i];
|
||||
const char *name = property_getName(p);
|
||||
const char *attributes = property_getAttributes(p);
|
||||
// for simple types we can use Key-Value Coding to access it
|
||||
// but in general we will have to use objc_msgSend to call the getter,
|
||||
// casting objc_msgSend to the right type of function corresponding to the type of the getter
|
||||
id value = [obj valueForKey:@(name)];
|
||||
NSLog(@"%s\t%s\t%@", name, attributes, value);
|
||||
}
|
||||
free(properties);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
/* REXX demonstrate uses of datatype() */
|
||||
/* test values */
|
||||
d.1=''
|
||||
d.2='a23'
|
||||
d.3='101'
|
||||
d.4='123'
|
||||
d.5='12345678901234567890'
|
||||
d.6='abc'
|
||||
d.7='aBc'
|
||||
d.8='1'
|
||||
d.9='0'
|
||||
d.10='Walter'
|
||||
d.11='ABC'
|
||||
d.12='f23'
|
||||
d.13='123'
|
||||
/* supported options */
|
||||
t.1='A' /* Alphanumeric */
|
||||
t.2='B' /* Binary */
|
||||
t.3='I' /* Internal whole number */
|
||||
t.4='L' /* Lowercase */
|
||||
t.5='M' /* Mixed case */
|
||||
t.6='N' /* Number */
|
||||
t.7='O' /* lOgical */
|
||||
t.8='S' /* Symbol */
|
||||
t.9='U' /* Uppercase */
|
||||
t.10='V' /* Variable */
|
||||
t.11='W' /* Whole number */
|
||||
t.12='X' /* heXadecimal */
|
||||
t.13='9' /* 9 digits */
|
||||
|
||||
hdr=left('',20)
|
||||
Do j=1 To 13
|
||||
hdr=hdr t.j
|
||||
End
|
||||
hdr=hdr 'datatype(v)'
|
||||
Say hdr
|
||||
Do i=1 To 13
|
||||
ol=left(d.i,20)
|
||||
Do j=1 To 13
|
||||
ol=ol datatype(d.i,t.j)
|
||||
End
|
||||
ol=ol datatype(d.i)
|
||||
Say ol
|
||||
End
|
||||
Say hdr
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<?
|
||||
class Foo {
|
||||
}
|
||||
$obj = new Foo();
|
||||
$obj->bar = 42;
|
||||
$obj->baz = true;
|
||||
|
||||
var_dump(get_object_vars($obj));
|
||||
?>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
package Point;
|
||||
use Class::Spiffy -base;
|
||||
|
||||
field 'x';
|
||||
field 'y';
|
||||
}
|
||||
|
||||
{
|
||||
package Circle;
|
||||
use base qw(Point);
|
||||
field 'r';
|
||||
}
|
||||
|
||||
my $p1 = Point->new(x => 8, y => -5);
|
||||
my $c1 = Circle->new(r => 4);
|
||||
my $c2 = Circle->new(x => 1, y => 2, r => 3);
|
||||
|
||||
use Data::Dumper;
|
||||
say Dumper $p1;
|
||||
say Dumper $c1;
|
||||
say Dumper $c2;
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
-->
|
||||
<span style="color: #008080;">class</span> <span style="color: #000000;">c</span> <span style="color: #7060A8;">nullable</span>
|
||||
<span style="color: #004080;">integer</span> <span style="color: #004080;">int</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span>
|
||||
<span style="color: #008080;">public</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">atm</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2.3</span>
|
||||
<span style="color: #004080;">string</span> <span style="color: #000000;">str</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"4point5"</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">seq</span>
|
||||
<span style="color: #008080;">public</span><span style="color: #0000FF;">:</span>
|
||||
<span style="color: #004080;">object</span> <span style="color: #000000;">obj</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"an object"</span><span style="color: #0000FF;">}</span>
|
||||
<span style="color: #000000;">c</span> <span style="color: #000000;">child</span>
|
||||
<span style="color: #008080;">private</span> <span style="color: #008080;">function</span> <span style="color: #000000;">foo</span><span style="color: #0000FF;">();</span>
|
||||
<span style="color: #008080;">public</span> <span style="color: #008080;">procedure</span> <span style="color: #000000;">bar</span><span style="color: #0000FF;">();</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">class</span>
|
||||
|
||||
<span style="color: #000000;">c</span> <span style="color: #000000;">c_instance</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">new</span><span style="color: #0000FF;">()</span>
|
||||
|
||||
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #000000;">structs</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span> <span style="color: #7060A8;">as</span> <span style="color: #000000;">structs</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">nulls</span><span style="color: #0000FF;">(</span><span style="color: #004080;">object</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">return</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">=</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">?</span><span style="color: #008000;">"NULL"</span><span style="color: #0000FF;">:</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
<span style="color: #004080;">sequence</span> <span style="color: #000000;">fields</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">structs</span><span style="color: #0000FF;">:</span><span style="color: #000000;">get_struct_fields</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">fields</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #004080;">string</span> <span style="color: #000000;">name</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">tid</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">flags</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">fields</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">flags</span><span style="color: #0000FF;">,</span><span style="color: #000000;">SF_RTN</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (exclude foo/bar)</span>
|
||||
<span style="color: #004080;">string</span> <span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">nulls</span><span style="color: #0000FF;">(</span><span style="color: #000000;">structs</span><span style="color: #0000FF;">:</span><span style="color: #000000;">get_field_type</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)),</span>
|
||||
<span style="color: #000000;">f</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">nulls</span><span style="color: #0000FF;">(</span><span style="color: #000000;">structs</span><span style="color: #0000FF;">:</span><span style="color: #000000;">get_field_flags</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span><span style="color: #004600;">true</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #004080;">object</span> <span style="color: #000000;">v</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">nulls</span><span style="color: #0000FF;">(</span><span style="color: #000000;">structs</span><span style="color: #0000FF;">:</span><span style="color: #000000;">fetch_field</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c_instance</span><span style="color: #0000FF;">,</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"type:%-11s, name:%-5s, flags:%s, value:%v\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">name</span><span style="color: #0000FF;">,</span><span style="color: #000000;">f</span><span style="color: #0000FF;">,</span><span style="color: #000000;">v</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<!--
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# The Rectangle class
|
||||
(class +Rectangle +Shape)
|
||||
# dx dy
|
||||
|
||||
(dm T (X Y DX DY)
|
||||
(super X Y)
|
||||
(=: dx DX)
|
||||
(=: dy DY) )
|
||||
|
||||
(dm area> ()
|
||||
(* (: dx) (: dy)) )
|
||||
|
||||
(dm perimeter> ()
|
||||
(* 2 (+ (: dx) (: dy))) )
|
||||
|
||||
(dm draw> ()
|
||||
(drawRect (: x) (: y) (: dx) (: dy)) ) # Hypothetical function 'drawRect'
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
: (setq R (new '(+Rectangle) 0 0 30 20))
|
||||
-> $177356065126400
|
||||
|
||||
: (show R)
|
||||
$177715702441044 (+Rectangle)
|
||||
dy 20
|
||||
dx 30
|
||||
y 0
|
||||
x 0
|
||||
-> $177715702441044
|
||||
|
|
@ -0,0 +1 @@
|
|||
Get-Date | Get-Member -MemberType Property
|
||||
|
|
@ -0,0 +1 @@
|
|||
Get-Date | Get-Member -MemberType Method -Name Add*
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
class Parent(object):
|
||||
__priv = 'private'
|
||||
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
|
||||
def __repr__(self):
|
||||
return '%s(%s)' % (type(self).__name__, self.name)
|
||||
|
||||
def doNothing(self):
|
||||
pass
|
||||
|
||||
import re
|
||||
|
||||
class Child(Parent):
|
||||
# prefix for "private" fields
|
||||
__rePrivate = re.compile('^_(Child|Parent)__')
|
||||
# used when setting dynamic property values
|
||||
__reBleh = re.compile('\Wbleh$')
|
||||
@property
|
||||
def reBleh(self):
|
||||
return self.__reBleh
|
||||
|
||||
def __init__(self, name, *args):
|
||||
super(Child, self).__init__(name)
|
||||
self.args = args
|
||||
|
||||
def __dir__(self):
|
||||
myDir = filter(
|
||||
# filter out private fields
|
||||
lambda p: not self.__rePrivate.match(p),
|
||||
list(set( \
|
||||
sum([dir(base) for base in type(self).__bases__], []) \
|
||||
+ type(self).__dict__.keys() \
|
||||
+ self.__dict__.keys() \
|
||||
)))
|
||||
return myDir + map(
|
||||
# dynamic properties
|
||||
lambda p: p + '_bleh',
|
||||
filter(
|
||||
# don't add dynamic properties for methods and other special properties
|
||||
lambda p: (p[:2] != '__' or p[-2:] != '__') and not callable(getattr(self, p)),
|
||||
myDir))
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name[-5:] == '_bleh':
|
||||
# dynamic '_bleh' properties
|
||||
return str(getattr(self, name[:-5])) + ' bleh'
|
||||
if hasattr(super(Child, chld), '__getattr__'):
|
||||
return super(Child, self).__getattr__(name)
|
||||
raise AttributeError("'%s' object has no attribute '%s'" % (type(self).__name__, name))
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
if name[-5:] == '_bleh':
|
||||
# skip backing properties that are methods
|
||||
if not (hasattr(self, name[:-5]) and callable(getattr(self, name[:-5]))):
|
||||
setattr(self, name[:-5], self.reBleh.sub('', value))
|
||||
elif hasattr(super(Child, self), '__setattr__'):
|
||||
super(Child, self).__setattr__(name, value)
|
||||
elif hasattr(self, '__dict__'):
|
||||
self.__dict__[name] = value
|
||||
|
||||
def __repr__(self):
|
||||
return '%s(%s, %s)' % (type(self).__name__, self.name, str(self.args).strip('[]()'))
|
||||
|
||||
def doStuff(self):
|
||||
return (1+1.0/1e6) ** 1e6
|
||||
|
||||
par = Parent('par')
|
||||
par.parent = True
|
||||
dir(par)
|
||||
#['_Parent__priv', '__class__', ..., 'doNothing', 'name', 'parent']
|
||||
inspect.getmembers(par)
|
||||
#[('_Parent__priv', 'private'), ('__class__', <class '__main__.Parent'>), ..., ('doNothing', <bound method Parent.doNothing of <__main__.Parent object at 0x100777650>>), ('name', 'par'), ('parent', True)]
|
||||
|
||||
chld = Child('chld', 0, 'I', 'two')
|
||||
chld.own = "chld's own"
|
||||
dir(chld)
|
||||
#['__class__', ..., 'args', 'args_bleh', 'doNothing', 'doStuff', 'name', 'name_bleh', 'own', 'own_bleh', 'reBleh', 'reBleh_bleh']
|
||||
inspect.getmembers(chld)
|
||||
#[('__class__', <class '__main__.Child'>), ..., ('args', (0, 'I', 'two')), ('args_bleh', "(0, 'I', 'two') bleh"), ('doNothing', <bound method Child.doNothing of Child(chld, 0, 'I', 'two')>), ('doStuff', <bound method Child.doStuff of Child(chld, 0, 'I', 'two')>), ('name', 'chld'), ('name_bleh', 'chld bleh'), ('own', "chld's own"), ('own_bleh', "chld's own bleh"), ('reBleh', <_sre.SRE_Pattern object at 0x10067bd20>), ('reBleh_bleh', '<_sre.SRE_Pattern object at 0x10067bd20> bleh')]
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
j=2
|
||||
abc.j= -4.12
|
||||
|
||||
|
||||
say 'variable abc.2 (length' length(abc.2)')=' abc.2
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
/* REXX shows the "equivalent" to PL/I's PUT DATA for a simple variable */
|
||||
/* put_data2('a.') to show all a.tail values isn't that easy :-) */
|
||||
j=2
|
||||
abc.j= -4.12
|
||||
Say put_data('abc.2') /* Put Data(abc(2)) */
|
||||
string=put_data('abc.2') /* Put string(string) Data(abc(2)) */
|
||||
Say string
|
||||
Exit
|
||||
put_data:
|
||||
Parse Arg variable
|
||||
return(variable'='''value(variable)'''')
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
class Foo {
|
||||
has $!a = now;
|
||||
has Str $.b;
|
||||
has Int $.c is rw;
|
||||
}
|
||||
|
||||
my $object = Foo.new: b => "Hello", c => 42;
|
||||
|
||||
for $object.^attributes {
|
||||
say join ", ", .name, .readonly, .container.^name, .get_value($object);
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
class Foo
|
||||
@@xyz = nil
|
||||
def initialize(name, age)
|
||||
@name, @age = name, age
|
||||
end
|
||||
def add_sex(sex)
|
||||
@sex = sex
|
||||
end
|
||||
end
|
||||
|
||||
p foo = Foo.new("Angel", 18) #=> #<Foo:0x0000000305a688 @name="Angel", @age=18>
|
||||
p foo.instance_variables #=> [:@name, :@age]
|
||||
p foo.instance_variable_defined?(:@age) #=> true
|
||||
p foo.instance_variable_get(:@age) #=> 18
|
||||
p foo.instance_variable_set(:@age, 19) #=> 19
|
||||
p foo #=> #<Foo:0x0000000305a688 @name="Angel", @age=19>
|
||||
foo.add_sex(:woman)
|
||||
p foo.instance_variables #=> [:@name, :@age, :@sex]
|
||||
p foo #=> #<Foo:0x0000000305a688 @name="Angel", @age=19, @sex=:woman>
|
||||
foo.instance_variable_set(:@bar, nil)
|
||||
p foo.instance_variables #=> [:@name, :@age, :@sex, :@bar]
|
||||
|
||||
p Foo.class_variables #=> [:@@xyz]
|
||||
p Foo.class_variable_defined?(:@@xyz) #=> true
|
||||
p Foo.class_variable_get(:@@xyz) #=> nil
|
||||
p Foo.class_variable_set(:@@xyz, :xyz) #=> :xyz
|
||||
p Foo.class_variable_get(:@@xyz) #=> :xyz
|
||||
p Foo.class_variable_set(:@@abc, 123) #=> 123
|
||||
p Foo.class_variables #=> [:@@xyz, :@@abc]
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
object ListProperties extends App {
|
||||
private val obj = new {
|
||||
val examplePublicField: Int = 42
|
||||
private val examplePrivateField: Boolean = true
|
||||
}
|
||||
private val clazz = obj.getClass
|
||||
|
||||
println("All public methods (including inherited):")
|
||||
clazz.getFields.foreach(f => println(s"${f}\t${f.get(obj)}"))
|
||||
|
||||
println("\nAll declared fields (excluding inherited):")
|
||||
clazz.getDeclaredFields.foreach(f => println(s"${f}}"))
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
someObject class instVarNames
|
||||
|
|
@ -0,0 +1 @@
|
|||
someObject class allInstVarNames
|
||||
|
|
@ -0,0 +1 @@
|
|||
someObject class allInstVarNames collect:[:nm | nm -> (someObject instVarNamed:nm)] as:Dictionary
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
% package require Tk
|
||||
8.6.5
|
||||
% . configure
|
||||
{-bd -borderwidth} {-borderwidth borderWidth BorderWidth 0 0} {-class class Class Toplevel Tclsh}
|
||||
{-menu menu Menu {} {}} {-relief relief Relief flat flat} {-screen screen Screen {} {}} {-use use Use {} {}}
|
||||
{-background background Background #d9d9d9 #d9d9d9} {-bg -background} {-colormap colormap Colormap {} {}}
|
||||
{-container container Container 0 0} {-cursor cursor Cursor {} {}} {-height height Height 0 0}
|
||||
{-highlightbackground highlightBackground HighlightBackground #d9d9d9 #d9d9d9}
|
||||
{-highlightcolor highlightColor HighlightColor #000000 #000000}
|
||||
{-highlightthickness highlightThickness HighlightThickness 0 0} {-padx padX Pad 0 0} {-pady padY Pad 0 0}
|
||||
{-takefocus takeFocus TakeFocus 0 0} {-visual visual Visual {} {}} {-width width Width 0 0}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
% lmap o [. configure] {if {[llength $o] == 2} continue else {lindex $o 0}}
|
||||
-borderwidth -class -menu -relief -screen -use -background -colormap -container -cursor -height
|
||||
-highlightbackground -highlightcolor -highlightthickness -padx -pady -takefocus -visual -width
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
Imports System.Reflection
|
||||
|
||||
Module Module1
|
||||
|
||||
Class TestClass
|
||||
Private privateField = 7
|
||||
Public ReadOnly Property PublicNumber = 4
|
||||
Private ReadOnly Property PrivateNumber = 2
|
||||
End Class
|
||||
|
||||
Function GetPropertyValues(Of T)(obj As T, flags As BindingFlags) As IEnumerable
|
||||
Return From p In obj.GetType().GetProperties(flags)
|
||||
Where p.GetIndexParameters().Length = 0
|
||||
Select New With {p.Name, Key .Value = p.GetValue(obj, Nothing)}
|
||||
End Function
|
||||
|
||||
Function GetFieldValues(Of T)(obj As T, flags As BindingFlags) As IEnumerable
|
||||
Return obj.GetType().GetFields(flags).Select(Function(f) New With {f.Name, Key .Value = f.GetValue(obj)})
|
||||
End Function
|
||||
|
||||
Sub Main()
|
||||
Dim t As New TestClass()
|
||||
Dim flags = BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance
|
||||
For Each prop In GetPropertyValues(t, flags)
|
||||
Console.WriteLine(prop)
|
||||
Next
|
||||
For Each field In GetFieldValues(t, flags)
|
||||
Console.WriteLine(field)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
End Module
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
#! instance_methods(m, n, o)
|
||||
#! instance_properties(p, q, r)
|
||||
class C {
|
||||
construct new() {}
|
||||
|
||||
m() {}
|
||||
|
||||
n() {}
|
||||
|
||||
o() {}
|
||||
|
||||
p {}
|
||||
|
||||
q {}
|
||||
|
||||
r {}
|
||||
}
|
||||
|
||||
var c = C.new() // create an object of type C
|
||||
System.print("List of properties available for object 'c':")
|
||||
for (property in c.type.attributes.self["instance_properties"]) System.print(property.key)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
properties:=List.properties;
|
||||
properties.println();
|
||||
List(1,2,3).property(properties[0]).println(); // get value
|
||||
List(1,2,3).Property(properties[0])().println(); // method that gets value
|
||||
List(1,2,3).BaseClass(properties[0]).println(); // another way to get value
|
||||
Loading…
Add table
Add a link
Reference in a new issue