defined?

  1. Привет :)

    На последната лекция стана малко объркване с defined? и къде би могло да се използва. Ето два примера за поведението на присвояването и кога Ruby създава локалната променлива:

    def is_defined
      if false
        var = 1
      end
    
      defined? var
    end
    
    def is_not_defined
      [].each do
        var = 1
      end
    
      defined? var
    end
    
    p is_defined
    p is_not_defined
    

    if false случая важи и за while, until, for и подобни синтактични конструкции. Блоковете се държат по друг начин.

  2. Малко уточнение - всъщност и двете създават локални променливи. Във втория случай локалната променлива е локална за блока и съответно не се вижда в контекста на метода. От друга страна if, while и компания не създават отделен блок:

    if true
      foo = 42
      defined?(foo) # => 'local-variable'
    end
    
    defined?(foo) # => 'local-variable'
    
    [1].map do
      bar = 42
      defined?(bar) # => 'local-variable'
    end
    
    defined?(bar) # => nil
    

Трябва да сте влезли в системата, за да може да отговаряте на теми.