使用符号初始化Ruby类,符号后面有两点(菜单:)

使用符号初始化Ruby类,符号后面有两点(菜单:),ruby,rspec,Ruby,Rspec,我有以下课程: class Takeaway def initialize(menu:) @menu = menu end def print_menu menu.print end private attr_reader :menu end 该类通过了我在RSpec中的测试: require "takeaway" RSpec.describe Takeaway do subject(:takeaway) { described_class

我有以下课程:

class Takeaway
  def initialize(menu:)
    @menu = menu
  end

  def print_menu
    menu.print
  end

  private

  attr_reader :menu
end
该类通过了我在RSpec中的测试:

require "takeaway"

RSpec.describe Takeaway do

  subject(:takeaway) { described_class.new(menu: menu) }

  let(:menu) { double(:menu, print: printed_menu) }
  let(:printed_menu) { "Chicken: €3.5" }

  it "shows the menu with the dishes and prices" do
    expect(takeaway.print_menu).to eq(printed_menu)
  end

end
我不懂这行:
def initialize(菜单:)


若我去掉菜单中的两点,测试就不会通过。这个物体是什么?符号?

这是Ruby 2.0中引入的一个称为“关键字参数”的功能,如果您使用过Python或Objective-C,您可能会更熟悉它。标准参数列表如下所示:

def f(x)   # Example: f(1)
def f(x,y) # Example: f(1,2)
现在,在涉及违约的情况下:

def f(x=1, y=2) # Example: f(0) or f(0, 3)
请注意,如果希望
x
使用其默认值,则不能调用
f(,3)

Ruby 2.0关键字参数版本修复了此问题:

def f(x:)       # Example: f(x: 1)
def f(x:1, y:2) # Example: f(y: 3)

下面没有值的
x:
表示它是一个没有默认值的命名参数,因此是必需的。调用不带参数的方法会产生错误。

它的关键字param:FYI该符号的名称为“冒号”。谷歌搜索“ruby参数冒号”