Code Monkey home page Code Monkey logo

q7's Introduction

Q7

Lifecycle: experimental Travis build status

Q7 is a type system that enables a postmodern flavor of compositional object-oriented programming (OOP). It is simple, flexible and promotes healthy program design.

Q7 features:

  • type(), feature() and implement() to compose objects;
  • For each object, initialize() and finalize() to run at its beginning and end of life;
  • For each object, public, private, final, private_final and active binding modifiers to change the visibility and behavior of its members.

Installation

# install.packages("devtools")
devtools::install_github("iqis/Q7")
require(Q7)
#> Loading required package: Q7
#> Loading required package: magrittr
#> 
#> Attaching package: 'Q7'
#> The following object is masked from 'package:base':
#> 
#>     merge

Example

Make a Q7 object in 3 easy steps.

1, Define an object type:

Adder <- type(function(num1, num2){
    add_nums <- function(){
        num1 + num2
    }
 })

2, Instantiate the object:

myAdder <- Adder(1, 2)

3, Enjoy!

myAdder$add_nums()
#> [1] 3

See vignettes for extending an object and other topics.

q7's People

Contributors

iqis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

q7's Issues

Make type portable

Use portable() to attach package scope to class's parent env chain.

myThing <- portable(type(function(a, b){
                add <- function() a + b
}))
## or 
myOtherThing <-  function(){
             value <- 1
           } %>%
          type() %>% 
          portable()

define type by another function

May I ask why this definition is OK

size <- Q7::type( function(size){ }, s3 = "ggsd.size")
x <- size(1)

But below definition result in error.

type_size <- function(size){ }
size <- Q7::type(type_size, s3 = "ggsd.size")
x <- size(1)

@nanxstats

S3 classes

retain class after using extend() -- also, rename extend()?
offer a feature()/implement() friendly way to manipulate S3 classes.

Lock bindings with `immutable()`

Locks all bindings, but not the envir itself, so new bindings can be added.

myThing <- myThing %>% immutable()

option to lock only functions?

Make the S3 class of the type `*_type`?

if ...s3 = "Foo" then the S3 class of the type would become Foo_type.
This fully differentiates type and object created from the type, but how does this affect features applied to a type?

Add static binding modifier

Create an environment in the class obj's attr.
Refer to this envir with active bindings in the public/private envirs of the obj.

Despite the potential hazard, pay no regard to the consequence of envir serialization now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.