(단일) * 연산자는 이 루비 코드에서 무엇을 합니까?
루비 코드가 주어졌을 때
line = "first_name=mickey;last_name=mouse;country=usa"
record = Hash[*line.split(/=|;/)]
저는 두 번째 줄의 모든 것을 이해합니다.*
운영자 - 무엇을 하고 있으며 이에 대한 문서는 어디에 있습니까?(여러분도 짐작하시겠지만, 이 사건을 찾는 것은 어려운 일입니다...)
그*
는 스플랫 연산자입니다.
그것은 확장합니다.Array
인수 목록으로, 이 경우에는 인수 목록으로.Hash.[]
방법. (더 정확히 말하자면, 그것은 반응하는 모든 물체를 확장합니다.to_ary
/to_a
또는to_a
Ruby 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 |