함수 (* args)에 해시 전달 및 의미
다음과 같은 관용구를 사용할 때 :
def func(*args)
# some code
end
의 의미는 *args
무엇입니까? 이 특정 질문을 검색하는 것은 꽤 어려웠고 아무것도 찾을 수 없었습니다.
모든 주장이 실제로 나타나는 것처럼 보이 args[0]
므로 다음과 같은 방어 코드를 작성합니다.
my_var = args[0].delete(:var_name) if args[0]
하지만 내가 놓치고있는 더 좋은 방법이 있다고 확신합니다.
은 *
은 IS 플랫 (또는 별표) 연산자. 메서드 컨텍스트에서 가변 길이 인수 목록을 지정합니다. 귀하의 경우, 모든 인수에 전달 func
라는 배열에 넣어됩니다 args
. 다음과 같이 가변 길이 인수 앞에 특정 인수를 지정할 수도 있습니다.
def func2(arg1, arg2, *other_args)
# ...
end
이 메서드를 호출한다고 가정 해 보겠습니다.
func2(1, 2, 3, 4, 5)
당신이 검사하는 경우 arg1
, arg2
그리고 other_args
내 func2
지금, 당신은 다음과 같은 결과를 얻을 것이다 :
def func2(arg1, arg2, *other_args)
p arg1.inspect # => 1
p arg2.inspect # => 2
p other_args.inspect # => [3, 4, 5]
end
귀하의 경우에는 해시를 인수로 전달하는 것 같습니다 func
.이 경우 args[0]
관찰하는 것처럼 해시가 포함됩니다.
자원:
OP의 의견에 따라 업데이트
Hash를 인수로 전달하려면 splat 연산자를 사용하지 않아야합니다. Ruby를 사용하면 메서드 호출에서 해시를 지정하는 괄호 (주의, 계속 읽기)를 포함하여 괄호를 생략 할 수 있습니다 . 따라서:
my_func arg1, arg2, :html_arg => value, :html_arg2 => value2
다음과 같다
my_func(arg1, arg2, {:html_arg => value, :html_arg2 => value2})
Ruby가 =>
인수 목록에서 연산자를 볼 때 명시적인 {...}
표기법 없이도 인수를 Hash로 취하는 것을 알고 있습니다 (해시 인수가 마지막 인수 인 경우에만 적용됩니다!).
이 해시를 수집하려면 특별한 작업을 수행 할 필요가 없습니다 (메소드 정의에서 기본값으로 빈 해시를 지정하고 싶을 것입니다).
def my_func(arg1, arg2, html_args = {})
# ...
end
참고 URL : https://stackoverflow.com/questions/3701264/passing-a-hash-to-a-function-args-and-its-meaning
'Programing' 카테고리의 다른 글
JavaScript에서 Object.defineProperty ()의 이상한 동작 (0) | 2020.11.02 |
---|---|
장고는 매개 변수와 함께 redirect ()를 반환합니다. (0) | 2020.11.02 |
GCM 서버 측에서 "MismatchSenderId"를 얻는 이유는 무엇입니까? (0) | 2020.11.02 |
--gtest_filter에서 여러 제외 필터를 지정하는 방법은 무엇입니까? (0) | 2020.11.02 |
C ++에서 파일의 MD5 해시를 얻는 방법은 무엇입니까? (0) | 2020.11.02 |