instance_eval에서 실례에 기능 추가

6016 단어 Rubytech

개요


Ruby "instance eval"사용
실례적인 기능을 동적으로 부여해 보아라.

컨디션

  • macOS Catarina
  • ruby 3.0.0
  • instance_이른바 eval


    매개변수의 문자열을 루비 프로그램으로 평가
    이 호출원 실례를 평가할 수 있는 처리 방법이다.
    https://docs.ruby-lang.org/ja/latest/method/BasicObject/i/instance_eval.html
    구체적인 예로 아래와 같다.
    class Sample
      def initialize
        @x = 10
      end
    end
    
    sample = Sample.new
    
    p sample   #<Sample:0x00007fe6ed9e6868 @x=10>
    
    sample.instance_eval "@y = 20"
    
    p sample   #<Sample:0x00007fe6ed9e6868 @x=10, @y=20>
    
    
    이 구체적인 예시와 같이 첫 번째 sample(Sample 클래스 실례)의 출력에서
    유지@x만 하고 그 다음은 instance입니다.eval에 저장@y두 번째sample의 출력에서@y도 실례 변수로 유지할 수 있다.instance_eval 수신기로서의 실례만
    응용 평가 프로그램.
    따라서 모든 실례에 고유한 처리를 추가할 수 있는 이미지다.

    이용 예


    예를 들어 게임 등 동적 읽기 캐릭터의 고유한 처리를 통해 처리할 수 있다
    나는 이런 일은 괜찮다고 생각한다.
    게임에서 각 캐릭터의 고유한 처리는 각각 파일에 기록된다
    게임 진행 중 그 파일 읽기 instanceeval에서 평가와 실례를 주다
    이런 인상.
    구체적인 예로 아래와 같다.character.rb
    class Character
      def initialize
        ...
      end
      
      # ここに共通処理を実装するのもいい.
      ...
    end
    
    c1 = Character.new
    c1.instance_eval File.read './characters/chara_1.rb'
    
    p c1
    c1.ability
    
    c2 = Character.new
    c2.instance_eval File.read './characters/chara_2.rb'
    
    p c2
    c2.ability
    
    
    ./characters/chara_1.rb
    @name = "ブレイブリーファルコン"
    @power = 5
    @health = 6
    
    def ability
      p "#{@name} executes own ability."
      p "ブレイブショット"
    end
    
    ./characters/chara_2.rb
    @name = "見習い剣士"
    @power = 2
    @health = 3
    
    def ability
      p "#{@name} executes own ability."
      p "クリティカルバスター"
    end
    
    실행 결과
    ❯❯❯ ruby character.rb
    #<Character:0x00007fe02b905cc8 @name="ブレイブリーファルコン", @power=5, @health=6>
    "ブレイブリーファルコン executes own ability."
    "ブレイブショット"
    #<Character:0x00007fe02b904288 @name="見習い剣士", @power=2, @health=3>
    "見習い剣士 executes own ability."
    "クリティカルバスター"
    
    위에서 말한 바와 같이 각 캐릭터의 설정 파일(상태와 능력 내용)을 읽고 각 실례에서 고유한 처리를 수행할 수 있다.

    좋은 웹페이지 즐겨찾기