Comments (9)
Class[String]
cannot be equivalent to singleton(String)
, because singleton(String)
has singleton methods.
I'm not sure if adding a generic parameter to Class
makes sense, because it can only be used to allocate
method. (RBS generates new
for each classes with types.)
I'm curious if there are more use cases.
from rbs.
Class[String]
cannot be equivalent tosingleton(String)
, becausesingleton(String)
has singleton methods.
You are correct, the singleton(String)
syntax enables special handling of singleton methods on the String
class.
But also note that, anything can have singleton methods, not just classes (Class
instances). And unfortunately, there is no RBS equivalent for:
class << SINGLETON = Superclass.new
def my_singleton_method …
and the current workaround is:
SINGLETON: Superclass & _SINGLETON
interface _SINGLETON
def my_singleton_method …
I'm not sure if adding a generic parameter to
Class
makes sense, because it can only be used toallocate
method. (RBS generatesnew
for each classes with types.)I'm curious if there are more use cases.
class Class[I]
# The attached objects of singleton classes is the only “instance” they can have,
# vs. regular classes that have `#allocate`/`#new`
def attached_object: () -> I
# This is `[T < I] (Class[T]) -> void` with the ineffective `[T]` flattened.
def inherited: (Class[I]) -> void
# ditto
def subclasses: () -> Array[Class[I]]
# If RBS has explicit countervariance like Java does…
def superclass: [I < T] () -> Class[T]
end
The top post also includes an abstraction of a user use case. Here’s my use case unabstracted.
from rbs.
If I may jump in, but i'd consider reserving that syntax to solve either module mixins, or delegation, both of which aren't yet solved in rbs.
module A[B]
# A mixin of B, meaning methods of A can call functions defined in B
# or
class A[B]
# class a delegates methods to B, could also solve the "delegate" stdlib
from rbs.
If I may jump in
of coarse you may
but i'd consider reserving that syntax to solve either module mixins, or delegation, both of which aren't yet solved in rbs.
module A[B] # A mixin of B, meaning methods of A can call functions defined in B # or class A[B] # class a delegates methods to B, could also solve the "delegate" stdlib
Let type variables go wild and do crazy things –
module A[B]
include B
…
from rbs.
Related Issues (20)
- Feature proposal: `rbs diff` command HOT 2
- Feature proposal: `rbs todo` command
- Should gems include private methods and constants in their RBS files? HOT 1
- Allow Type Variable constraints to be arbitrary types HOT 1
- `Enumerable#to_set` accepts a block
- `SimpleDelegator` is missing HOT 1
- Many Kernel methods are defined as Object methods HOT 6
- URI is missing HOT 3
- Logger is missing
- Set#intersect?, Set#disjoint? signatures are too narrow HOT 1
- The `range[T]` type definition is to restrictive
- `_Range[T]` shouldn't return `T?` for `begin` and `end`
- override a function with a block fails
- Singleton does not have method `instance` HOT 1
- add an `assert_const_type`
- Cannot specify type variables for `instance` HOT 6
- manifest.yaml does not allow gems as dependencies
- Feature proposal: Multiple error on `rbs validate` HOT 1
- stringio should be a stdlib, but it's in `core/`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rbs.