루비를 통해 hia 문서에서 조건부 분기 및 반복 처리하는 방법

7048 단어 Rubyerbtech

개시하다


여러 줄 문자열을 생성하고 싶을 때 하이아 문서는 편리하지만 하이아 문서에서 조건 구분과 순환 처리를 할 때 좀 힘들기 때문에 총괄해 보겠습니다.

설치 방법


예를 들어 다음 규격의 명령행 스크립트를 실현해 보십시오.
  • 태그에 기술된 블로그 글에 YAML 헤더를 자동으로 추가하는 기능
  • 제목, 미리 보기 그림, 라벨을 매개 변수로 제시하면 @options 변수를 이용하여 각 매개 변수의 값을 얻을 수 있다
  • 이때 YAML 헤더를 hia 문서로 기술합니다.
    require 'erb'
    
    header = <<~'HEADER'
      ---
      layout: post
      title: "<%= @options[:title] %>"
      image: "<%= @options[:image] %>"
      date: "<%= Time.now.strftime('%Y-%m-%d') %>"
      tags:
      <%- @options[:tags]&.each do |tag| -%>
      - <%= tag %>
      <%- end -%>
      ---
    HEADER
    
    puts ERB.new(header, nil, '-').result(binding)
    
    \n를 실제 줄로 바꾼 결과는 다음과 같다.
    ---
    layout: post
    title: "Hello world!"
    image: "/images/2021/09/hello_world.png"
    date: "2021-09-06 22:37:34"
    tags:
    - greeting
    - first-post
    ---
    

    해설


    Hia 문서에서 조건부 분기 또는 순환 처리를 하려면 ERB를 사용합니다.
  • <%--%> 포위된 곳에서 Ruby
  • 실행
  • <%=%>에 둘러싸인 곳에서 Ruby를 실행할 때의 반환값
  • 을 출력합니다.
    이들 두 곳 모두 Rubby가 포위된 곳에서 실행되고 있지만 출력 결과가 그대로 표시되는지 여부가 다릅니다.@options[:tags]&.each do |tag|end의 부분은 출력 결과가 아니라 루비<%--%>를 실행하기를 희망할 뿐이다.

    trim_mode 정보

    <%--%>의 설명은 '-'를 ERB 실례를 생성할 때의 세 번째 매개 변수로 지정하여 사용할 수 있음을 주의하십시오.이것은trim_mode이라고 불린다.
    # 第 3 引数に '-' を指定
    ERB.new(header, nil, '-').result(binding)
    
    trim_mode만 사용하지 않고hia 문서의 출력만 매개 변수로 지정하면 다음과 같이 설명할 수 있습니다.
    require 'erb'
    
    erb = ERB.new <<~'HEADER'
      ---
      layout: post
      title: "<%= @options[:title] %>"
      image: "<%= @options[:image] %>"
      date: "<%= Time.now.strftime('%Y-%m-%d') %>"
      tags:
      <% @options[:tags]&.each do |tag| %>
      - <%= tag %>
      <% end %>
      ---
    HEADER
    
    puts erb.result(binding)
    
    ERB 실례를 생성할 때 첫 번째 파라미터에hia 문서의 쓰기 방법을 직접 제출한다.사용하지 않기 때문trim_mode,<%--%>,<%가 아니라 %>를 사용합니다.
    이 경우 출력은 다음과 같습니다.
    ---
    layout: post
    title: "Hello world!"
    image: "/images/2021/09/hello_world.png"
    date: "2021-09-06 22:43:28"
    tags:
    
    - greeting
    
    - first-post
    
    ---
    
    여분의 빈 줄을 출력했습니다.<% @options[:tags]&.each do |tag| %>의 부분과<% end %>의 부분이 줄로 존재하지만 아무것도 출력하지 않기 때문이다.
    이렇게 하면 Ruby 코드만 실행하려는 행이라도 존재하면 출력 결과에 반영됩니다.
    이 문제를 해결한 것은trim_mode이다.이번 예에서 제3인자-가 지정되었기 때문에 <%%>로 대체<%-하면 여분의 줄 바꾸기가 없을 것이다.-%>에 대한 자세한 내용은 ERB 참조 안내서를 참조하십시오.

    약점


    ERB를 사용하면 hia 문서에서 조건부 분기와 순환 처리를 할 수 있지만 다음과 같은 단점이 있다.
  • 문법 오류가 발생했을 때 줄 수가 식별하기 어렵다
  • ERB를 사용하는 Hia 문서에서 문법 오류가 발생하면 Hia 문서의 줄 수에 오류가 발생한 부분을 표시합니다.파일의 줄 수가 아닙니다.
    그래서 몇 줄에 문법이 틀렸는지 한눈에 알 수 없다.하이아 문서가 너무 길면 문법 오류가 발생할 때 추적이 어려워질 수 있으니 주의하세요.

    참고 자료

  • While loop in a here documents
  • class ERB
  • 좋은 웹페이지 즐겨찾기