동일한 인수 집합을 다른 메서드에 전달하는 많은 (키워드) 인수를 취하는 여러 메서드가 있습니다.
다음은 정상입니다.
def foo(a:, b:, c:, d:, e:)
bar('var', a:a, b:b, c:c, d:d, e:e)
end
# takes the same arguments as #foo + one more
def bar(var, a:, b:, c:, d:, e:)
...
end
이것은 지루하고 성가신 일입니다. Ruby 코어에 다음을 쉽게 수행 할 수있는 것이 있는지 궁금합니다.
def foo(a:, b:, c:, d:, e:)
bar('var', <something that automagically collects all of the keyword args>)
end
나는 당신이를 파싱하고 method(__method__).parameters
, 체조를하고, 모든 것을 이중으로 뿌려서 bar
.에 전달할 수있는 해시로 패키징 할 수 있다는 것을 알고 있습니다 . 나는 그저 멋지고 깔끔한 방식으로 핵심에 이미 무언가가 있는지 궁금합니다.
좀 더 일반적인 방식으로 적용되는 것이 있다면, 즉 키워드 args뿐만 아니라 그것도 확실히 흥미 롭습니다.
예, **args
임의의 키워드 인수 를 해시로 수집 합니다. **를 다시 사용하여 해시를에 대한 키워드 인수로 병합합니다 bar
. Ruby 3는 더 이상이 작업을 수행하지 않습니다.
def foo(**bar_args)
# The ** is necessary in Ruby 3.
bar('var', **bar_args)
end
def bar(var, a:, b:, c:, d:, e:)
puts "#{var} #{a} #{b} #{c} #{d} #{e}"
end
foo
해당 인수를 사용하지 않는 경우 적합 하며 bar
. 경우 foo
일부 인수를 사용했다, 그이 정의되어야한다 foo
.
def foo(a:, **bar_args)
puts "#{a} is for a"
bar('var', a: a, **bar_args)
end
def bar(var, a:, b:, c:, d:, e:)
puts "#{var} #{a} #{b} #{c} #{d} #{e}"
end
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다