与Lodash';让我们在Ruby中开始吧?

与Lodash';让我们在Ruby中开始吧?,ruby,lodash,Ruby,Lodash,我希望使用类似于Lodash的get和set的东西,但是使用Ruby而不是JavaScript。我尝试了几次搜索,但找不到类似的东西 Lodash的文档可能会以更好的方式对其进行解释,但它是从字符串路径获取和设置属性(例如,'x[0].y.z')。如果设置属性时不存在完整路径,则会自动创建该路径 Ruby 2.3引入了新的安全导航器操作符,用于获取嵌套/链接的值: x[0]&.y&.z#=>结果或零 否则,Rails monkey将使用try(…)修补所有对象,从而允许您: x[0]。尝

我希望使用类似于Lodash的get和set的东西,但是使用Ruby而不是JavaScript。我尝试了几次搜索,但找不到类似的东西

Lodash的文档可能会以更好的方式对其进行解释,但它是从字符串路径获取和设置属性(例如,'x[0].y.z')。如果设置属性时不存在完整路径,则会自动创建该路径


Ruby 2.3引入了新的安全导航器操作符,用于获取嵌套/链接的值:

x[0]&.y&.z#=>结果或零
否则,Rails monkey将使用
try(…)
修补所有对象,从而允许您:

x[0]。尝试(:y)。尝试(:z)#=>结果或零
设置有点困难,我建议在尝试设置属性之前确保您拥有最终对象,例如:

如果obj=x[0]&.y&.z
z、 name=“Dr Robot”
结束

我最终将Lodash.set和u.get从JavaScript移植到Ruby和。

有时我需要通过编程将属性的值深入到对象中,但问题是有时属性实际上是一个方法,有时它需要参数

所以我提出了这个解决方案,希望它能帮助你设计一个解决问题的方案: (需要Rails'try)

def reduce_属性(对象、选项)
options.reduce({})do| hash,(属性,方法)|
hash[attribute]=methods.reduce(object){| a,e | a.try!(:send,*e)}
搞砸
结束
结束
#用法示例
o=Object.new
属性映射={
#与o.object\u id相同
id:[:对象\u id],
#与o.object\u id.to\u s相同
id_as_字符串:[:对象id,:to_s],
#与o.object\u id.to\u.length相同
id作为字符串长度:[:对象id,:到s,:长度],
#我知道,这是一个人为的例子,但它的目的是
#来说明如何使用参数调用方法
#与o.object_id.to_s.scan(/\d/)[1]to_i.相同
第二个号码来自以下地址:[:对象id,:到s,[:扫描,/\d/],[:[],1],:到i]
}
减少(o,属性映射)的属性
#{:id=>47295942175460,
#:id_as_string=>“47295942175460”,
#:id_as_string_length=>14,
#:第二个\u编号\u自\u id=>7}

您可以使用大多数Lodash实用程序附带的Rudash Gem,而不仅仅是uu.get和u.set。

这可能会有所帮助:谢谢。在我的用例中,字符串路径是动态的,只有在运行时才知道,但我将在其他地方使用安全导航器操作符。