在 Crystal 中使用命名参数重载方法?

Overload method with named arguments in Crystal?

是否可以根据参数名称重载具有相同类型的方法?

def inspect(url : String); inspect_url(url) end
def inspect(path : String); inspect_path(path) end

# Always will be called with explicit names
inspect url: "some url"
inspect path: "some path"

# Never without names, this form is not needed 
# and never will be used
inspect "something"

splat 参数后的参数只能作为命名参数传递。典型的用法是有一个未命名的 splat 参数,后跟命名参数。

def inspect(*, url : String)
  "inspect url"
end

def inspect(*, path : String)
  "inspect path"
end

inspect url: "some url"   # => "inspect url"
inspect path: "some path" # => "inspect path"

inspect "something" # Invalid number of arguments