Ruby Language
키워드 인수
수색…
비고
키워드 인수 는 Ruby 2.0에서 도입되었으며 필수 키워드 인수가 추가 된 Ruby 2.1에서 향상되었습니다.
키워드 인수를 사용하는 간단한 메소드는 다음과 같습니다.
def say(message: "Hello World")
puts message
end
say
# => "Hello World"
say message: "Today is Monday"
# => "Today is Monday"
키워드 인수가없는 동일한 메소드는 다음과 같았습니다.
def say(message = "Hello World")
puts message
end
say
# => "Hello World"
say "Today is Monday"
# => "Today is Monday"
이전 Ruby 버전에서 Hash 매개 변수를 사용하여 키워드 인수를 시뮬레이션 할 수 있습니다. 이것은 여전히 매우 일반적인 관행이며 특히 2.0 이전의 Ruby 버전과의 호환성을 제공하는 라이브러리에서 특히 그렇습니다.
def say(options = {})
message = options.fetch(:message, "Hello World")
puts
end
say
# => "Hello World"
say message: "Today is Monday"
# => "Today is Monday"
키워드 인수 사용
메서드 정의에서 이름을 지정하여 메서드에서 키워드 인수를 정의합니다.
def say(message: "Hello World")
puts message
end
say
# => "Hello World"
say message: "Today is Monday"
# => "Today is Monday"
여러 키워드 인수를 정의 할 수 있습니다. 정의 순서는 부적합합니다.
def say(message: "Hello World", before: "<p>", after: "</p>")
puts "#{before}#{message}#{after}"
end
say
# => "<p>Hello World</p>"
say message: "Today is Monday"
# => "<p>Today is Monday</p>"
say after: "</p><hr>", message: "Today is Monday"
# => "<p>Today is Monday</p><hr>"
키워드 인수는 위치 인수와 함께 사용할 수 있습니다.
def say(message, before: "<p>", after: "</p>")
puts "#{before}#{message}#{after}"
end
say "Hello World", before: "<span>", after: "</span>"
# => "<span>Hello World</span>"
키워드 인수를 위치 인수와 함께 사용하는 것은 Ruby 2.1 이전의 매우 일반적인 접근 방법이었습니다. 필요한 키워드 인수 를 정의 할 수 없었기 때문입니다.
또한 Ruby <2.0에서는 선택적 인수에 사용할 메서드 정의의 끝에 Hash
를 추가하는 것이 매우 일반적이었습니다. 구문은 키워드 인수와 매우 유사합니다. Hash
를 통한 선택적 인수가 Ruby 2 키워드 인수와 호환 될 수 있습니다.
def say(message, options = {})
before = option.fetch(:before, "<p>")
after = option.fetch(:after, "</p>")
puts "#{before}#{message}#{after}"
end
# The method call is syntactically equivalent to the keyword argument one
say "Hello World", before: "<span>", after: "</span>"
# => "<span>Hello World</span>"
정의되지 않은 키워드 인수를 전달하려고하면 오류가 발생합니다.
def say(message: "Hello World")
puts message
end
say foo: "Hello"
# => ArgumentError: unknown keyword: foo
필수 키워드 인수
Ruby 2.1에서는 키워드 인수를 개선하기 위해 필요한 키워드 인수 가 도입되었습니다.
필요에 따라 키워드 인수를 정의하려면 기본값없이 인수를 선언하십시오.
def say(message:)
puts message
end
say
# => ArgumentError: missing keyword: message
say message: "Hello World"
# => "Hello World"
필수 및 필수 키워드 인수를 혼합 할 수도 있습니다.
def say(before: "<p>", message:, after: "</p>")
puts "#{before}#{message}#{after}"
end
say
# => ArgumentError: missing keyword: message
say message: "Hello World"
# => "<p>Hello World</p>"
say message: "Hello World", before: "<span>", after: "</span>"
# => "<span>Hello World</span>"
splat 연산자로 임의의 키워드 인수 사용하기
double splat ( **
) 연산자를 사용하여 임의의 수의 키워드 인수를 허용하는 메소드를 정의 할 수 있습니다.
def say(**args)
puts args
end
say foo: "1", bar: "2"
# {:foo=>"1", :bar=>"2"}
인수는 Hash
로 캡처됩니다. 예를 들어 원하는 인수를 추출하기 위해 Hash
를 조작 할 수 있습니다.
def say(**args)
puts args[:message] || "Message not found"
end
say foo: "1", bar: "2", message: "Hello World"
# Hello World
say foo: "1", bar: "2"
# Message not found
키워드 인수가있는 splat 연산자를 사용하면 키워드 인수 유효성 검사를 방지 할 수 있습니다.이 메서드는 알 수없는 키워드의 경우 ArgumentError
를 발생시키지 않습니다.
표준 splat 연산자에 관해서는 Hash
를 메소드의 키워드 인수로 다시 변환 할 수 있습니다.
def say(message: nil, before: "<p>", after: "</p>")
puts "#{before}#{message}#{after}"
end
args = { message: "Hello World", after: "</p><hr>" }
say(**args)
# <p>Hello World</p><hr>
args = { message: "Hello World", foo: "1" }
say(**args)
# => ArgumentError: unknown keyword: foo
이것은 일반적으로 들어오는 인수를 조작하여 기본 메소드에 전달해야 할 때 사용됩니다.
def inner(foo:, bar:)
puts foo, bar
end
def outer(something, foo: nil, bar: nil, baz: nil)
puts something
params = {}
params[:foo] = foo || "Default foo"
params[:bar] = bar || "Default bar"
inner(**params)
end
outer "Hello:", foo: "Custom foo"
# Hello:
# Custom foo
# Default bar