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
코드 블록은 다음 목록에서 각 요소에 대한 블록 코드의 실행을 허용하는 방법, 및 간의 비트가do
와end
바로 그러한 블록이다. 블록은 익명 함수 또는lambda
. 파이프 문자 사이의 변수는이 블록의 매개 변수입니다.What happens here is that for every entry in a list,
name
is bound to that list element, and then the expressionputs "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
'code' 카테고리의 다른 글
Android의 카메라에서 사용하는 SurfaceView에 오버레이를 그리는 방법은 무엇입니까? (0) | 2020.11.05 |
---|---|
C #의 C ++ 유니온 (0) | 2020.11.05 |
POCO는 무엇을 의미합니까? (0) | 2020.11.05 |
온라인 저장소에서 체크 아웃 할 때 SVN 오류 (200 OK) (0) | 2020.11.05 |
datetime 또는 timestamp를 사용하는 경우 (0) | 2020.11.05 |