而不是使用&
塊調用一個方法,我怎麼能說兩種方法同時使用`
objects_array.collect(&:errors)
我可以調用兩種方法同時使用&
`&?我想要這樣的事情:
objects_array.collect(&:errors.full_messages)
這可能嗎?
而不是使用&
塊調用一個方法,我怎麼能說兩種方法同時使用`
objects_array.collect(&:errors)
我可以調用兩種方法同時使用&
`&?我想要這樣的事情:
objects_array.collect(&:errors.full_messages)
這可能嗎?
無法通過單次傳遞和簡寫操作完成此操作。要麼兩次通過
objects_array.collect(&:errors).collect(&:full_messages)
或使用完整的形式。
objects_array.collect{ |obj| obj.errors.full_messages }
雖然它會工作,但不必要的中間陣列和2個循環.. :) –
@ Md.FarhanMemon:是的,這就是我說的:) –
能這可能嗎?
不,它只是一個速記方法,使用塊代替..
objects_array.collect { |obl| obj.errors.full_messages }
如果重新定義Symbol#method_missing
存儲方法鏈,也重新定義Symbol#to_proc
使用擴展到一個進程有可能存儲的方法鏈。但我相當肯定它會帶來更多的複雜性而不是它的幫助,並導致一些嚴重的問題。這不值得去做。
它只適用於未定義的方法,即'[1,10,100]。 map(&:to_s.length)'會產生一個'TypeError'而不是返回'[1,2,3]',因爲Symbol響應'length'。 – Stefan
@Stefan是的,更復雜的'undef_method'和調用'method_missing''原始方法的調度組合應該在這裏發生。 – mudasobwa
@Stefan OTOH'Symbol#to_proc'可能會返回一個擴展的'Proc'後代,它返回一個包裹着'TypeError'救助者的proc,而後者又會將調用委託給它們所屬的地方。這是行不通的。 –
mudasobwa
請注意,您要調用的方法不是同時發生的。 –
幾乎所有的事情都可能*在紅寶石裏,這取決於你想爲它工作的難度。 (大多數時候這是不值得的努力) – engineersmnky
感謝所有這些評論。我已經知道它可以使用地圖/收集。我只是想知道它是否可能。謝謝。 –