使用符号初始化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参数冒号”