Ruby中实现类似JavaScript展开运算符的方法
Ruby 中实现数组常量复用追加的简洁写法
%i是Ruby专门用于快速生成符号数组的字面量语法,本身不支持在内部直接展开其他数组,要实现「MAX_KEYS包含MIN_KEYS全部元素+追加额外元素」的效果,有两种常用的简洁兼容写法:
- 数组直接拼接(全版本兼容,可读性最高)
利用Ruby数组的+运算符生成新数组,最终对结果冻结即可,不会修改原MIN_KEYS的内容:
MIN_KEYS = %i[email password password_confirmation role].freeze MAX_KEYS = (MIN_KEYS + %i[company_admin company_id]).freeze
最终生成的MAX_KEYS元素顺序和手动枚举的版本完全一致:先按原有顺序排列MIN_KEYS的所有元素,后面依次跟上追加的company_admin、company_id两个符号。
- Splat展开写法(对齐JS展开运算符的书写逻辑,Ruby 2.0+ 支持)
Ruby用*实现和JS...等价的数组展开能力,注意展开操作要写在普通数组字面量[]中,不能直接放在%i字面量内部:
MIN_KEYS = %i[email password password_confirmation role].freeze MAX_KEYS = [*MIN_KEYS, :company_admin, :company_id].freeze
注意:不要用
concat、<<这类会修改原数组的方法追加元素,因为MIN_KEYS调用了freeze,调用这类可变方法会直接抛出运行时错误。
内容的提问来源于stack exchange,提问作者zcserei
相关产品推荐
相关产品推荐

