code

Ruby에서 파이프 기호는 무엇입니까?

codestyles 2020. 11. 5. 08:03
반응형

Ruby에서 파이프 기호는 무엇입니까?


Ruby에서 파이프 기호는 무엇입니까?

PHP 및 Java 배경에서 Ruby와 RoR을 배우고 있지만 다음과 같은 코드를 계속 접하게됩니다.

def new 
  @post = Post.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml { render :xml => @post }
  end
end

|format|부분 은 무엇을 하고 있습니까? PHP / Java에서 이러한 파이프 기호의 동등한 구문은 무엇입니까?


그것들은 블록에 산출 된 변수입니다.

def this_method_takes_a_block
  yield(5)
end

this_method_takes_a_block do |num|
  puts num
end

"5"를 출력합니다. 좀 더 신비한 예 :

def this_silly_method_too(num)
  yield(num + 5)
end

this_silly_method_too(3) do |wtf|
  puts wtf + 1
end

출력은 "9"입니다.


처음에는 나에게도 매우 이상했지만이 설명 / 워크 스루가 도움이 되었기를 바랍니다.

문서 는 꽤 좋은 방식으로 주제를 다룹니다. 내 대답이 도움이되지 않으면 그들의 가이드가 도움이 될 것이라고 확신합니다.

먼저 irb에 입력하고을 눌러 Interactive Ruby 인터프리터를 시작합니다 Enter.

다음과 같이 입력하십시오.

the_numbers = ['ett','tva','tre','fyra','fem'] # congratulations! You now know how to count to five in Swedish.

우리가 놀 수있는 배열을 갖도록합니다. 그런 다음 루프를 만듭니다.

the_numbers.each do |linustorvalds|
    puts linustorvalds
end

줄 바꿈으로 구분 된 모든 숫자를 출력합니다.

다른 언어에서는 다음과 같이 작성해야합니다.

for (i = 0; i < the_numbers.length; i++) {
    linustorvalds = the_numbers[i]
    print linustorvalds;
}

주목해야 할 중요한 점은 |thing_inside_the_pipes|일관되게 사용하는 한 무엇이든 될 수 있다는 것입니다. 그리고 그것이 우리가 이야기하고있는 루프라는 것을 이해하십시오. 그것은 나중에까지 얻지 못했습니다.


@names.each do |name|
  puts "Hello #{name}!"
end

http://www.ruby-lang.org/en/documentation/quickstart/4/ 이 설명 동반한다 :

each코드 블록은 다음 목록에서 각 요소에 대한 블록 코드의 실행을 허용하는 방법, 및 간의 비트가 doend바로 그러한 블록이다. 블록은 익명 함수 또는 lambda. 파이프 문자 사이의 변수는이 블록의 매개 변수입니다.

What happens here is that for every entry in a list, name is bound to that list element, and then the expression puts "Hello #{name}!" is run with that name.


The code from the do to the end defines a Ruby block. The word format is a parameter to the block. The block is passed along with the method call, and the called method can yield values to the block.

See any text on Ruby for details, this is a core feature of Ruby that you will see all the time.


The equivalent in Java would be something like

// Prior definitions

interface RespondToHandler
{
    public void doFormatting(FormatThingummy format);
}

void respondTo(RespondToHandler)
{
    // ...
}

// Equivalent of your quoted code

respondTo(new RespondToHandler(){
    public void doFormatting(FormatThingummy format)
    {
        format.html();
        format.xml();
    }
});

Parameters for a block sit between the | symbols.


To make it even more clearer, if needed:

the pipe bars essentially make a new variable to hold the value generated from the method call prior. Something akin to:

Original definition of your method:

def example_method_a(argumentPassedIn)
     yield(argumentPassedIn + 200)
end

How It's used:

example_method_a(100) do |newVariable|
    puts newVariable;
end

It's almost the same as writing this:

newVariable = example_method_a(100) 
puts newVariable

where, newVariable = 200 + 100 = 300 :D!

참고URL : https://stackoverflow.com/questions/665576/what-are-those-pipe-symbols-for-in-ruby

반응형