理解Ruby方法参数语法

理解Ruby方法参数语法,ruby,keyword-argument,Ruby,Keyword Argument,我一直在遵循一个关于Pluralsight的RSpec教程来创建一个基本的纸牌游戏。当类被定义为此类时: class Card def initialize(suit:, rank:) @suit = suit @rank = case rank when :jack then 11 when :queen then 12 when :king then 13 else rank end end en

我一直在遵循一个关于Pluralsight的RSpec教程来创建一个基本的纸牌游戏。当类被定义为此类时:

class Card
  def initialize(suit:, rank:)
    @suit = suit
    @rank =
      case rank
      when :jack then 11
      when :queen then 12
      when :king then 13
      else rank
      end
  end
end
例如,RSpec测试代码为:

RSpec.describe 'a playing card' do
  it 'has a suit' do
    raise unless Card.new(suit: :spades, rank: 4).suit == :spades
  end
end

我没有遇到像这样的方法参数语法
(suit::spades,rank:4)
。有人能解释一下这是什么意思吗,或者告诉我在哪里可以找到它的正确方向吗?

这叫做关键字参数。与位置参数不同,您可以按任何顺序传递它们,但必须提供它们的名称。这可以极大地提高可读性,特别是对于具有更高算术性的方法

它被称为关键字参数。与位置参数不同,您可以按任何顺序传递它们,但必须提供它们的名称。这可以极大地提高可读性,特别是对于具有更高算术性的方法

谢谢。我意识到我以前在设置默认参数时遇到过这一点,如果没有指定(必须在我的课程中使用codecademy)。@ggwc默认值(
defm(a=6)
)稍有不同,带有默认值的参数根本不需要指定(即
m()
m(11)
工作),命名参数将参数散列解压为局部变量(或多或少)。谢谢。我意识到我以前在设置默认参数时遇到过这一点,如果没有指定(必须在我的课程中使用codecademy)。@ggwc默认值(
defm(a=6)
)稍有不同,带有默认值的参数根本不需要指定(即
m()
m(11)
工作),命名参数将参数散列解压为局部变量(或多或少)。