Ruby 基于另一个数组更新一个数组
假设我有Ruby 基于另一个数组更新一个数组,ruby,arrays,object,Ruby,Arrays,Object,假设我有 a = ["a","b","c","d","e","f","g"] b = a.map(&:upcase) a.delete("a") print b # right now b = ["A","B","C","D","E","F","G"] # I want b = ["B","C","D","E","F","G"] 我希望b根据a拥有的内容动态更新自身,这样,b最终打印出来时不带“a”,因为“a”已从a中删除。我想把b与a分开;我不想就地修改a(无
a = ["a","b","c","d","e","f","g"]
b = a.map(&:upcase)
a.delete("a")
print b # right now b = ["A","B","C","D","E","F","G"]
# I want b = ["B","C","D","E","F","G"]
我希望b
根据a
拥有的内容动态更新自身,这样,b
最终打印出来时不带“a”
,因为“a”
已从a
中删除。我想把b
与a
分开;我不想就地修改a
(无map!
)。这可能吗?TL;博士
您似乎想要一个与另一个数组共享成员的从属数组,但显示数组成员的方式不同。你可以用红宝石做这个
创建一个带有“刺伤”Lambda的闭包
有多种方法可以提供具有不同行为的单个数据集的多个表示。然而,对于您的用例来说,定义一个自定义类可能有些过分。我认为将a分配给b是实现您想要的最简单的方法,至少在将a和b视为独立但相连的对象的意义上是如此。考虑:
a = %w[a b c d e f g]
b = ->{ a.map(&:upcase) }
a.delete ?a
b.call
#=> ["B", "C", "D", "E", "F", "G"]
a
#=> ["b", "c", "d", "e", "f", "g"]
仅使用
a.map(&:upcase)
不应就地修改。@撤消OP需要一个共享成员的依赖数组,但以不同方式显示数组成员。内容相同,但行为不同。这可能是一个X/Y问题,但使用Proc或lambda进行最少的仪式肯定是可行的。这非常有趣,非常适合我的目的。非常感谢你。我不得不说,Proc类非常酷。