(단일) * 연산자는 이 루비 코드에서 무엇을 합니까?
루비 코드가 주어졌을 때
line = "first_name=mickey;last_name=mouse;country=usa"
record = Hash[*line.split(/=|;/)]
저는 두 번째 줄의 모든 것을 이해합니다.*운영자 - 무엇을 하고 있으며 이에 대한 문서는 어디에 있습니까?(여러분도 짐작하시겠지만, 이 사건을 찾는 것은 어려운 일입니다...)
그*는 스플랫 연산자입니다.
그것은 확장합니다.Array인수 목록으로, 이 경우에는 인수 목록으로.Hash.[]방법. (더 정확히 말하자면, 그것은 반응하는 모든 물체를 확장합니다.to_ary/to_a또는to_aRuby 1.9에서.)
예를 들어, 다음 두 문장은 동일합니다.
method arg1, arg2, arg3
method *[arg1, arg2, arg3]
또한 메서드 정의의 나머지 메서드 인수를 모두 캡처하기 위해 다른 컨텍스트에서도 사용할 수 있습니다.이 경우 확장되지 않고 다음을 결합합니다.
def method2(*args) # args will hold Array of all arguments
end
자세한 내용은 여기를 참조하십시오.
스플랫 연산자는 함수에 전달된 배열을 풀어서 각 요소가 개별 매개 변수로 함수에 전송되도록 합니다.
간단한 예:
>> def func(a, b, c)
>> puts a, b, c
>> end
=> nil
>> func(1, 2, 3) #we can call func with three parameters
1
2
3
=> nil
>> list = [1, 2, 3]
=> [1, 2, 3]
>> func(list) #We CAN'T call func with an array, even though it has three objects
ArgumentError: wrong number of arguments (1 for 3)
from (irb):12:in 'func'
from (irb):12
>> func(*list) #But we CAN call func with an unpacked array.
1
2
3
=> nil
바로 그거야!
모두가 언급하듯이, 그것은 "스플랫"입니다.Ruby 구문을 찾는 것은 불가능하며, 다른 질문들에서 이것을 물었습니다.질문의 그 부분에 대한 답은 당신이 검색하는 것입니다.
asterisk in ruby syntax
구글에서.구글은 여러분을 위해 있습니다. 여러분이 보는 것을 말로 표현하세요.
Anyhoo, 많은 루비 코드처럼, 그 코드는 꽤 조밀합니다.그
line.split(/=|;/)
6개의 요소를 배열합니다.first_name, mickey, last_name, mouse, country, usa그런 다음 스플랫을 사용하여 해시를 만듭니다.이제 루비 사람들은 항상 당신에게 스플랫 방법을 보라고 보냅니다. 왜냐하면 모든 것이 루비에 노출되어 있기 때문입니다.어디에 있는지는 모르겠지만 일단 그것을 손에 넣으면, 그것이 작동하는 것을 볼 수 있을 것입니다.for어레이를 통해 해시를 빌드합니다.
핵심 문서에서 코드를 찾습니다.찾을 수 없는 경우(찾을 수 없음) 다음과 같은 코드를 작성합니다(작동하지만 루비와 유사한 코드는 아님).
line = "first_name=mickey;last_name=mouse;country=usa"
presplat = line.split(/=|;/)
splat = Hash.new
for i in (0..presplat.length-1)
splat[presplat[i]] = presplat[i+1] if i%2==0
end
puts splat["first_name"]
그러면 루비 갱단은 왜 당신의 코드가 바보같거나, 나쁘거나, 아니면 그냥 틀리는지 말해줄 수 있을 것입니다.
여기까지 읽은 경우 초기화를 위해 해시 설명서를 읽어 보십시오.
기본적으로 여러 인수로 초기화된 해시는 키 값 쌍으로 생성됩니다.
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
따라서 예제에서는 다음과 같은 해시가 생성됩니다.
{"first_name"=>"mickey", "last_name"=>"mouse", "county"=>"usa"}
언급URL : https://stackoverflow.com/questions/918449/what-does-the-unary-operator-do-in-this-ruby-code
'source' 카테고리의 다른 글
| Tomcat/Jetty에 Spring boot app vs.war 파일 구축 (0) | 2023.07.04 |
|---|---|
| Oracle용 무료 데스크톱 클라이언트? (0) | 2023.07.04 |
| knitr을 사용하여 마크다운을 위해 로컬 이미지의 크기를 설정하는 방법은 무엇입니까? (0) | 2023.07.04 |
| 과학적 표기 없이 SQL Server에서 float를 varchar로 변환 (0) | 2023.07.04 |
| Oracle PL/SQL - NO_DATA_Found 예외가 저장 프로시저 성능에 좋지 않습니까? (0) | 2023.07.04 |