Last active
November 14, 2018 13:58
-
-
Save javierfernandes/ec8767ac19be5bdff1edd63d42e0afa7 to your computer and use it in GitHub Desktop.
Metaprogramacion - Ruby - IRB en clase - Log de lo que hicimos en clase 14/11/2018
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| >> >> require_relative("./src/age.rb") | |
| => true | |
| >> >> atila = Guerrero.new | |
| => #<Guerrero:0x00007fc5d20a37d8 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10> | |
| >> >> atila.class | |
| => Guerrero | |
| >> >> atila.class.name | |
| => "Guerrero" | |
| >> >> atila.class | |
| => Guerrero | |
| >> >> Peloton.methods(false) | |
| => [:cobarde, :descansador] | |
| >> >> atila.methods(false) | |
| => [] | |
| >> >> atila.methods() | |
| => [:peloton, :lastimado, :cansado, :sufri_danio, :peloton=, :descansar, :descansar_atacante, :descansar_defensor, :potencial_defensivo=, :energia, :potencial_defensivo, :energia=, :potencial_ofensivo=, :descansado, :atacar, :descansado=, :potencial_ofensivo, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :define_singleton_method, :public_send, :singleton_method, :extend, :pp, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :object_id, :send, :to_s, :display, :nil?, :hash, :class, :singleton_class, :clone, :itself, :dup, :taint, :yield_self, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :!, :equal?, :instance_eval, :==, :instance_exec, :!=, :__id__, :__send__] | |
| >> >> atila.methods(false) | |
| => [] | |
| >> >> atila.class.instance_methods(false) | |
| => [:peloton, :lastimado, :cansado, :sufri_danio, :peloton=, :descansar, :descansar_atacante, :descansar_defensor] | |
| >> >> atila.class.instance_methods() == atila.methods() | |
| => true | |
| >> >> Guerrero.superclass | |
| => Object | |
| >> >> Guerrero.ancestors | |
| => [Guerrero, Defensor, Atacante, Object, Kernel, BasicObject] | |
| >> >> unaClase = Guerrero | |
| => Guerrero | |
| >> >> unaClase.instance_methods() | |
| => [:peloton, :lastimado, :cansado, :sufri_danio, :peloton=, :descansar, :descansar_atacante, :descansar_defensor, :potencial_defensivo=, :energia, :potencial_defensivo, :energia=, :potencial_ofensivo=, :descansado, :atacar, :descansado=, :potencial_ofensivo, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :define_singleton_method, :public_send, :singleton_method, :extend, :pp, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :object_id, :send, :to_s, :display, :nil?, :hash, :class, :singleton_class, :clone, :itself, :dup, :taint, :yield_self, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :!, :equal?, :instance_eval, :==, :instance_exec, :!=, :__id__, :__send__] | |
| >> >> objeto = atila | |
| => #<Guerrero:0x00007fc5d20a37d8 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10> | |
| >> >> atila.methods() | |
| => [:peloton, :lastimado, :cansado, :sufri_danio, :peloton=, :descansar, :descansar_atacante, :descansar_defensor, :potencial_defensivo=, :energia, :potencial_defensivo, :energia=, :potencial_ofensivo=, :descansado, :atacar, :descansado=, :potencial_ofensivo, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :define_singleton_method, :public_send, :singleton_method, :extend, :pp, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :object_id, :send, :to_s, :display, :nil?, :hash, :class, :singleton_class, :clone, :itself, :dup, :taint, :yield_self, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :!, :equal?, :instance_eval, :==, :instance_exec, :!=, :__id__, :__send__] | |
| >> >> atila | |
| => #<Guerrero:0x00007fc5d20a37d8 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10> | |
| >> >> atila.descansar() | |
| => 110 | |
| >> >> mensaje = :descansar | |
| => :descansar | |
| >> >> objeto.send(mensaje) | |
| => 120 | |
| >> >> atila | |
| => #<Guerrero:0x00007fc5d20a37d8 @potencial_ofensivo=20, @energia=120, @potencial_defensivo=10, @descansado=true> | |
| >> >> objeto.send(mensaje) | |
| => 130 | |
| >> >> atila.send(:fruta) | |
| Traceback (most recent call last): | |
| 1: from (irb):28 | |
| NoMethodError (undefined method `fruta' for #<Guerrero:0x00007fc5d20a37d8>) | |
| >> >> atila.fruta | |
| Traceback (most recent call last): | |
| 1: from (irb):29 | |
| NoMethodError (undefined method `fruta' for #<Guerrero:0x00007fc5d20a37d8>) | |
| >> >> atila.methods().include? :descansar | |
| => true | |
| >> >> atila.methods().include? :fruta | |
| => false | |
| >> >> def construirInstancia(clase) clase.new end | |
| => :construirInstancia | |
| >> >> construirInstancia(Guerrero) | |
| => #<Guerrero:0x00007fc5d0940a78 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10> | |
| >> >> (1..20).map { || construirInstancia(Guerrero)} | |
| => [#<Guerrero:0x00007fc5d09370e0 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d09370b8 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0937090 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0937068 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0937040 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0937018 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936ff0 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936fc8 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936fa0 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936f78 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936f50 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936f28 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936f00 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936ed8 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936eb0 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936e88 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936e60 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936e10 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936d70 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>, #<Guerrero:0x00007fc5d0936d20 @potencial_ofensivo=20, @energia=100, @potencial_defensivo=10>] | |
| >> >> atila.method(:descansar) | |
| => #<Method: Guerrero#descansar> | |
| >> >> descansar = atila.method(:descansar) | |
| => #<Method: Guerrero#descansar> | |
| >> >> descansar.call() | |
| => 140 | |
| >> >> Guerrero.instance_method(:descansar) | |
| => #<UnboundMethod: Guerrero#descansar> | |
| >> >> unboundDescansar = Guerrero.instance_method(:descansar) | |
| => #<UnboundMethod: Guerrero#descansar> | |
| >> >> unboundDescansar.call() | |
| Traceback (most recent call last): | |
| 1: from (irb):40 | |
| NoMethodError (undefined method `call' for #<UnboundMethod: Guerrero#descansar>) | |
| >> >> unboundDescansar.methods(false) | |
| => [] | |
| >> >> unboundDescansar.methods() | |
| => [:arity, :==, :hash, :to_s, :inspect, :clone, :source_location, :parameters, :original_name, :name, :owner, :super_method, :eql?, :bind, :construirInstancias, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :define_singleton_method, :public_send, :singleton_method, :extend, :pp, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :respond_to?, :freeze, :object_id, :send, :display, :nil?, :class, :singleton_class, :itself, :dup, :taint, :yield_self, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :!, :equal?, :instance_eval, :instance_exec, :!=, :__id__, :__send__] | |
| >> >> unboundDescansar.owner | |
| => Guerrero | |
| >> >> unboundDescansar.super_method | |
| => #<UnboundMethod: Defensor#descansar> | |
| >> >> unboundDescansar.bind(atila) | |
| => #<Method: Guerrero#descansar> | |
| >> >> unboundDescansar.bind(atila).call() | |
| => 150 | |
| >> >> unboundDescansar.bind(atila) == descansar | |
| => true | |
| >> >> atila.descansado | |
| => true | |
| >> >> atila.descansado = false | |
| => false | |
| >> >> atila.descansado | |
| => false | |
| >> >> atila.descansar | |
| => 160 | |
| >> >> atila.descansado | |
| => true | |
| >> >> atila.descansado = false | |
| => false | |
| >> >> Defensor.instance_method(:descansar).bind(atila).call() | |
| => 170 | |
| >> >> atila.energia | |
| => 170 | |
| >> >> atila.descansado | |
| => false | |
| >> >> Defensor.instance_method(:descansar).bind(Object).call() | |
| Traceback (most recent call last): | |
| 3: from (irb):59 | |
| 2: from (irb):59:in `call' | |
| 1: from /Users/jfernandes/dev/data/repo/o3/tadp-clases/src/age.rb:32:in `descansar' | |
| NoMethodError (undefined method `energia' for Object:Class) | |
| >> >> atila.instance_variable_get(:energia) | |
| Traceback (most recent call last): | |
| 2: from (irb):60 | |
| 1: from (irb):60:in `instance_variable_get' | |
| NameError (`energia' is not allowed as an instance variable name) | |
| >> >> atila.instance_variable_get(:@energia) | |
| => 170 | |
| >> >> atila.instance_variable_set(:@energia, 90) | |
| => 90 | |
| >> >> atila.energia | |
| => 90 | |
| >> >> atila.class.instance_variable_set(:@energiaGlobal, 10000) | |
| => 10000 | |
| >> >> Guerrero.instance_variable_get(:@energiaGlobal) | |
| => 10000 | |
| >> >> Guerrero.define_method(:duplicarEnergia) { self.energia *= 2 } | |
| => :duplicarEnergia | |
| >> >> atila.duplicarEnergia | |
| => 180 | |
| >> >> Guerrero.send(:define_method, :triplicarEnergia) { self.energia *= 3 } | |
| => :triplicarEnergia | |
| >> >> atila.triplicarEnergia() | |
| => 540 | |
| >> >> cuadriplicador = proc { self.energia *= 4 } | |
| => #<Proc:0x00007fc5d09a70e8@(irb):72> | |
| >> >> Guerrero.define_method(:energiaPorCuatro, &cuadriplicador) | |
| => :energiaPorCuatro | |
| >> >> atila.energiaPorCuatro | |
| => 2160 | |
| >> >> class Guerrero | |
| def quintuplicarEnergia | |
| self.energia *= 5 | |
| end | |
| end | |
| >> >> >> >> => :quintuplicarEnergia | |
| >> >> atila.quintuplicarEnergia | |
| => 10800 | |
| >> >> atila.quintuplicarEnergia | |
| => 54000 | |
| >> >> class Guerrero | |
| def quintuplicarEnergia | |
| self.energia *= 10 | |
| end | |
| end | |
| >> >> >> >> => :quintuplicarEnergia | |
| >> >> atila.quintuplicarEnergia | |
| => 540000 | |
| >> >> atila.quintuplicarEnergia | |
| => 5400000 | |
| >> >> def atila.porDiezEnergia | |
| >> >> self.energia *= 10 | |
| >> >> end | |
| => :porDiezEnergia | |
| >> >> atila.porDiezEnergia | |
| => 54000000 | |
| >> >> atila.porDiezEnergia | |
| => 540000000 | |
| >> >> Guerrero.new().porDiezEnergia | |
| Traceback (most recent call last): | |
| 1: from (irb):95 | |
| NoMethodError (undefined method `porDiezEnergia' for #<Guerrero:0x00007fc5d091d208>) | |
| >> >> atila.methods(false) | |
| => [:porDiezEnergia] | |
| >> >> atila.method(:porDiezEnergia) | |
| => #<Method: #<Guerrero:0x00007fc5d20a37d8 @potencial_ofensivo=20, @energia=540000000, @potencial_defensivo=10, @descansado=false>.porDiezEnergia> | |
| >> >> atila.class.instance_method(:porDiezEnergia) | |
| Traceback (most recent call last): | |
| 2: from (irb):98 | |
| 1: from (irb):98:in `instance_method' | |
| NameError (undefined method `porDiezEnergia' for class `Guerrero') | |
| >> >> atila.singleton_class | |
| => #<Class:#<Guerrero:0x00007fc5d20a37d8>> | |
| >> >> atila.singleton_class.instance_methods() | |
| => [:porDiezEnergia, :energiaPorCuatro, :quintuplicarEnergia, :sufri_danio, :peloton=, :descansar, :descansar_atacante, :descansar_defensor, :peloton, :lastimado, :cansado, :duplicarEnergia, :triplicarEnergia, :potencial_defensivo=, :energia, :potencial_defensivo, :energia=, :potencial_ofensivo=, :descansado, :atacar, :descansado=, :potencial_ofensivo, :construirInstancias, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :define_singleton_method, :public_send, :singleton_method, :extend, :pp, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :object_id, :send, :to_s, :display, :nil?, :hash, :class, :singleton_class, :clone, :itself, :dup, :taint, :yield_self, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :!, :equal?, :instance_eval, :==, :instance_exec, :!=, :__id__, :__send__] | |
| >> >> atila.singleton_class.instance_methods(false) | |
| => [:porDiezEnergia] | |
| >> >> otroAtila = atila.singleton_class.new() | |
| Traceback (most recent call last): | |
| 2: from (irb):102 | |
| 1: from (irb):102:in `new' | |
| TypeError (can't create instance of singleton class) | |
| >> >> Peloton.methods() | |
| => [:cobarde, :descansador, :new, :allocate, :superclass, :<=>, :autoload, :autoload?, :<=, :>=, :==, :===, :included_modules, :include?, :name, :ancestors, :attr, :attr_reader, :attr_writer, :attr_accessor, :instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :constants, :const_get, :const_set, :const_defined?, :class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, :class_variable_defined?, :public_constant, :freeze, :inspect, :deprecate_constant, :private_constant, :const_missing, :singleton_class?, :prepend, :class_exec, :module_eval, :class_eval, :include, :<, :>, :remove_method, :undef_method, :alias_method, :protected_method_defined?, :module_exec, :method_defined?, :public_method_defined?, :to_s, :public_class_method, :private_method_defined?, :instance_method, :private_class_method, :define_method, :public_instance_method, :construirInstancias, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :define_singleton_method, :public_send, :singleton_method, :extend, :pp, :to_enum, :enum_for, :=~, :!~, :eql?, :respond_to?, :object_id, :send, :display, :nil?, :hash, :class, :singleton_class, :clone, :itself, :dup, :taint, :yield_self, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :!, :equal?, :instance_eval, :instance_exec, :!=, :__id__, :__send__] | |
| >> >> Peloton.methods(false) | |
| => [:cobarde, :descansador] | |
| >> >> Peloton.methods(:descansador) | |
| => [:cobarde, :descansador, :new, :allocate, :superclass, :<=>, :autoload, :autoload?, :<=, :>=, :==, :===, :included_modules, :include?, :name, :ancestors, :attr, :attr_reader, :attr_writer, :attr_accessor, :instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :constants, :const_get, :const_set, :const_defined?, :class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, :class_variable_defined?, :public_constant, :freeze, :inspect, :deprecate_constant, :private_constant, :const_missing, :singleton_class?, :prepend, :class_exec, :module_eval, :class_eval, :include, :<, :>, :remove_method, :undef_method, :alias_method, :protected_method_defined?, :module_exec, :method_defined?, :public_method_defined?, :to_s, :public_class_method, :private_method_defined?, :instance_method, :private_class_method, :define_method, :public_instance_method, :construirInstancias, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :define_singleton_method, :public_send, :singleton_method, :extend, :pp, :to_enum, :enum_for, :=~, :!~, :eql?, :respond_to?, :object_id, :send, :display, :nil?, :hash, :class, :singleton_class, :clone, :itself, :dup, :taint, :yield_self, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :!, :equal?, :instance_eval, :instance_exec, :!=, :__id__, :__send__] | |
| >> >> Peloton.method(:descansador) | |
| => #<Method: Peloton.descansador> | |
| >> >> Peloton.singleton_class.method(:descansador) | |
| Traceback (most recent call last): | |
| 2: from (irb):107 | |
| 1: from (irb):107:in `method' | |
| NameError (undefined method `descansador' for class `#<Class:#<Class:Peloton>>') | |
| >> >> Peloton.singleton_class.instance_method(:descansador) | |
| => #<UnboundMethod: #<Class:Peloton>#descansador> | |
| >> >> atila.class = Peloton | |
| Traceback (most recent call last): | |
| 1: from (irb):109 | |
| NoMethodError (undefined method `class=' for #<Guerrero:0x00007fc5d20a37d8>) | |
| Did you mean? class | |
| >> >> tipo = Object.new | |
| => #<Object:0x00007fc5d2136f10> | |
| >> >> class Tipo end | |
| => nil | |
| >> >> Tipo.include Atacante | |
| => Tipo | |
| >> >> tipo = Tipo.new | |
| => #<Tipo:0x00007fc5d21251c0> | |
| >> >> tipo.descansar | |
| => true | |
| >> >> tipo | |
| => #<Tipo:0x00007fc5d21251c0 @descansado=true> | |
| >> >> module Dolar | |
| >> >> def precioDolar 37 end | |
| >> >> extend | |
| >> >> nil | |
| >> >> end | |
| Traceback (most recent call last): | |
| SyntaxError ((irb):117: syntax error, unexpected tINTEGER, expecting ';' or '\n') | |
| def precioDolar 37 end | |
| ^~ | |
| (irb):120: syntax error, unexpected keyword_end, expecting end-of-input | |
| >> >> module PrecioDolar def precioDolar 37.54 end end | |
| Traceback (most recent call last): | |
| SyntaxError ((irb):121: syntax error, unexpected tFLOAT, expecting ';' or '\n') | |
| ...ecioDolar def precioDolar 37.54 end end | |
| ... ^~~~~ | |
| >> >> module PrecioDolar def precioDolar() 37.54 end end | |
| => :precioDolar | |
| >> >> Guerrero.include PrecioDolar | |
| => Guerrero | |
| >> >> atila.precioDolar | |
| => 37.54 | |
| >> >> Guerrero.extend PrecioDolar | |
| => Guerrero | |
| >> >> Guerrero.new().precioDolar | |
| => 37.54 | |
| >> >> Tipo.extend PrecioDolar | |
| => Tipo | |
| >> >> tipo | |
| => #<Tipo:0x00007fc5d21251c0 @descansado=true> | |
| >> >> tipo precioDolar | |
| Traceback (most recent call last): | |
| 1: from (irb):129 | |
| NameError (undefined local variable or method `precioDolar' for main:Object) | |
| >> >> Tipo.precioDolar | |
| => 37.54 | |
| >> >> Tipo new | |
| Traceback (most recent call last): | |
| 1: from (irb):131 | |
| NameError (undefined local variable or method `new' for main:Object) | |
| >> >> Tipo.new | |
| => #<Tipo:0x00007fc5d200e728> | |
| >> >> Tipo.new().precioDolar | |
| Traceback (most recent call last): | |
| 1: from (irb):133 | |
| NoMethodError (undefined method `precioDolar' for #<Tipo:0x00007fc5d101be88>) | |
| >> >> Tipo.methods(false) | |
| => [] | |
| >> >> Tipo.ancestors | |
| => [Tipo, Atacante, Object, Kernel, BasicObject] | |
| >> >> Tipo.singleton_class.ancestors | |
| => [#<Class:Tipo>, PrecioDolar, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject] | |
| >> >> class EntiendeTodo | |
| def saludar | |
| "Hola" | |
| end | |
| def method_missing(symbol, *args) | |
| "No se #{symbol}(#{args})" | |
| end | |
| end | |
| >> >> >> >> >> >> >> >> => :method_missing | |
| >> >> >> >> e = EntiendeTodo new | |
| Traceback (most recent call last): | |
| 1: from (irb):148 | |
| NameError (undefined local variable or method `new' for main:Object) | |
| >> >> e = EntiendeTodo.new | |
| => #<EntiendeTodo:0x00007fc5d212d578> | |
| >> >> e.saludar | |
| => "Hola" | |
| >> >> e.fruta | |
| => "No se fruta([])" | |
| >> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment