source

(단일) * 연산자는 이 루비 코드에서 무엇을 합니까?

manysource 2023. 7. 4. 21:59

(단일) * 연산자는 이 루비 코드에서 무엇을 합니까?

루비 코드가 주어졌을 때

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