답변:
은 *
은 IS 플랫 연산자.
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
splat 연산자는 함수에 전달 된 배열의 압축을 풀어 각 요소가 함수에 개별 매개 변수로 전송되도록합니다.
간단한 예 :
>> 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
그게 다야!
모두가 언급했듯이, 그것은 "표시"입니다. 루비 구문을 찾는 것은 불가능하며 다른 질문에서 이것을 물었습니다. 질문의 해당 부분에 대한 답변은
asterisk in ruby syntax
구글에서. Google은 당신을 위해 있습니다. 당신이 보는 것을 말로 표현하십시오.
많은 루비 코드와 마찬가지로 그 코드는 매우 밀도가 높습니다. 그만큼
line.split(/=|;/)
SIX 요소의 배열을 만듭니다 first_name, mickey, last_name, mouse, country, usa
. 그런 다음 스 플랫을 사용하여 해시로 만듭니다. 이제 Ruby 사람들은 모든 것이 Ruby에 노출되어 있기 때문에 항상 Splat 메소드를 보도록 보냅니다. 나는 그것이 어디에 있는지 모른다. 그러나 일단 당신이 그것을 가지고 나면 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"}
a,b,*c = d,e,f,*g
a = d, b = e 및 c = [f, g0, g1, g2, ..., gn]을 설정합니다. 여기서 g = [g0, g1, g2, ..., gn]