Interface of objects that expose some kind of internal representation in a very unreliable way.

The point of this interface is to allow objects to give a basic representation of themselves within a simple key-value dictionary. The specific semantic of each key and value is let unspecified.

Moreover the class annotation auto_derive will automatically implements the interface with the attributes locally defined in the class.

class A
   auto_derive
   var an_int: Int
   var a_string: String
end

var a = new A(5, "five")
var map = a.derive_to_map
assert map.length == 2
assert map["an_int"] == 5
assert map["a_string"] == "five"

Introduced properties

fun derive_to_map: Map[String, nullable Object]

deriving :: Derivable :: derive_to_map

Returns a map that loosely represents the object self.

Redefined properties

redef type SELF: Derivable

deriving $ Derivable :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun derive_to_map: Map[String, nullable Object]

deriving :: Derivable :: derive_to_map

Returns a map that loosely represents the object self.
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
package_diagram deriving::Derivable Derivable core::Object Object deriving::Derivable->core::Object deriving::DeriveToS DeriveToS deriving::DeriveToS->deriving::Derivable deriving::DeriveEqual DeriveEqual deriving::DeriveEqual->deriving::Derivable

Parents

interface Object

core :: Object

The root of the class hierarchy.

Children

interface DeriveEqual

deriving :: DeriveEqual

Implementation of == and hash for Derivable objects.
interface DeriveToS

deriving :: DeriveToS

Implementation of to_s for Derivable objects.

Class definitions

deriving $ Derivable
# Interface of objects that expose some kind of internal representation in a very unreliable way.
#
# The point of this interface is to allow objects to give a basic representation of
# themselves within a simple key-value dictionary.
# The specific semantic of each key and value is let unspecified.
#
# Moreover the class annotation `auto_derive` will automatically implements the
# interface with the attributes locally defined in the class.
#
# ~~~
# class A
#    auto_derive
#    var an_int: Int
#    var a_string: String
# end
#
# var a = new A(5, "five")
# var map = a.derive_to_map
# assert map.length == 2
# assert map["an_int"] == 5
# assert map["a_string"] == "five"
# ~~~
interface Derivable
	# Returns a map that loosely represents the object `self`.
	#
	# Warning: by default the method returns an empty Map.
	# It is done this way so that subclasses can just call `super` and add their own attributes.
	#
	# Forgetting to redefine `derive_to_map` will broke the expectation of the user of the class
	# Since an empty map is not POLA.
	#
	# Note that the semantic of keys and values is let unspecified.
	# Moreover, there is no specification nor mechanism to avoid key collision.
	fun derive_to_map: Map[String, nullable Object]
	do
		return new HashMap[String, nullable Object]
	end
end
lib/deriving/deriving.nit:24,1--61,3