Ruby版本:2.3.1
似乎不能使用关键字params声明Ruby Structs。有没有办法做到这一点Struct?
例:
MyStruct = Struct.new(:fname, :lname)
=> MyStruct
my_struct = MyStruct.new(fname: 'first', lname: 'last')
=> <struct MyStruct fname={:fname=>"first", :lname=>"last"}, lname=nil>
my_struct.fname
=> {:fname=>"first", :lname=>"last"}
my_struct.lname
=> nil
Run Code Online (Sandbox Code Playgroud)
使用Ruby 2.5,您可以将keyword_init选项设置为true。
MyStruct = Struct.new(:fname, :lname, keyword_init: true)
# => MyStruct(keyword_init: true)
irb(main):002:0> my_struct = MyStruct.new(fname: 'first', lname: 'last')
# => #<struct MyStruct fname="first", lname="last">
Run Code Online (Sandbox Code Playgroud)
my_struct = MyStruct.new(fname: 'first', lname: 'last')
Run Code Online (Sandbox Code Playgroud)
是相同的
my_struct = MyStruct.new({ fname: 'first', lname: 'last' })
#=> #<struct MyStruct fname={:fname=>"first", :lname=>"last"}, lname=nil>
Run Code Online (Sandbox Code Playgroud)
(一个参数)sofname设置为等于参数并lname设置为nil, 与 相同x, y = [2]; x #=> 2; y #=> nil。
这是因为当散列是方法的参数时,Ruby 允许省略大括号。
您可能希望搜索 SO 来查找相关问题,例如此问题。