J'ai essayé d'écrire du code comme une déclaration de type en Ruby

Conclusion

Le code suivant fonctionnera.

n = int 42
# =>42 est remplacé

f = int 4.2
# => TypeError!

Ce que j'ai fait

Patch Monkey pour le module Kernel comme suit

module Kernel
    module_function
        
    def int(var = 0)
        if var.is_a?(Integer)
            var
        else
           raise TypeError, "#{var} isn't Integer"
        end
    end 
end

Après cela, vous pouvez créer une variable Ruby comme une déclaration de type simplement en écrivant n = int 42. De plus, si vous passez une valeur d'un type (ou d'une classe) différent, TypeError apparaîtra comme une exception.

n = int 42
i = int 21

p n
# => 42
p i
# => 21

n = int 4.2
# => `int': 4.2 isn't Integer (TypeError)

Si vous voulez restreindre la plage d'influence, vous devez écrire comme suit dans raffinements

module Type
    refine Kernel do
       module_function
        
       def int(var = 0)
           if var.is_a?(Integer)
               var
           else
              raise TypeError, "#{var} isn't Integer"
           end
       end
    end
end

Après cela, si vous utilisez ʻusing Type` là où vous voulez l'utiliser, c'est OK.

en conclusion

Pour le moment, ʻInteger et String` peuvent être écrits comme une déclaration de type comme celle-ci. Réfléchissons à la façon d'écrire Array ou Hash.

Recommended Posts

J'ai essayé d'écrire du code comme une déclaration de type en Ruby
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
Je veux créer un fichier Parquet même en Ruby
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
J'ai créé un client RESAS-API en Java
J'ai écrit un analyseur C (comme) en utilisant PEG dans Ruby
J'ai essayé de créer une application cartographique simple dans Android Studio
J'ai essayé d'implémenter le traitement Ajax de la fonction similaire dans Rails
J'ai essayé d'illuminer le sapin de Noël dans un jeu de la vie
J'ai essayé de faire un Numeron qui n'est pas bon avec Ruby
Je veux écrire un joli build.gradle
J'ai essayé de migrer le traitement vers VS Code
Je veux écrire un test unitaire!
J'ai essayé d'utiliser Selenium comme JQuery
J'ai essayé d'incorporer une formule dans Javadoc
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
[Ruby] J'ai essayé de résumer les méthodes fréquentes dans paiza
[Ruby] J'ai essayé de résumer les méthodes fréquentes avec paiza ②
Mémorandum pour nettoyer le code Ruby
J'ai essayé d'organiser la session en Rails
java j'ai essayé de casser un simple bloc
Code pour échapper aux chaînes JSON en Java
J'ai essayé de développer un outil de gestion des effectifs
J'ai essayé de développer un site Web pour étudier DUO3.0.
[Ruby] Je veux faire un saut de méthode!
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Je veux écrire une simple répétition d'une chaîne de caractères
J'ai essayé de créer une application de clonage LINE
J'ai créé une bibliothèque d'extension Ruby en C
[Notions de base sur Ruby] J'ai essayé d'apprendre des modules (Chapitre 1)
Comment écrire du code qui pense Ruby orienté objet
Comment implémenter une fonctionnalité similaire dans Rails
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
J'ai essayé de développer une application en 2 langues
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé de développer un site Web pour enregistrer les dépenses.
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de casser le bloc avec java (1)
Je veux obtenir la valeur en Ruby
J'ai essayé de mettre facilement CentOS-7 dans un PC dont je n'ai plus besoin
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby (temps limite 10 minutes)
J'ai fait un exemple de la façon d'écrire un délégué dans Swift UI 2.0 à l'aide de MapKit