私はこの厄介な手続きロジック実行するための機能的な方法を探しています:私は基本的にオブジェクトの配列(すべて同じタイプ)を持っており、彼らの#name
属性に参加する必要がありますが、そのオブジェクトには、次の値の配列を変化するセパレータと結合する機能的アプローチ?
values = [a, b, c, d, e, f]
last_value = nil
string = ""
values.each do |v|
string << if last_value && last_value.special?
"/x/" + v.name.to_s
else
"/" + v.name.to_s
end
last_value = v
end
を私は別のセパレーターが必要です。
これは簡単に解決される問題ですが、最もクリーンで機能的なアプローチを探しています。最初は#inject
に分割されましたが、各繰り返しで以前の値が失われてしまいました。何か案は?
あなたはおそらくとにかくそれを実行することができませんでしたので、申し訳ありませんが、私は実際のコードの代わりに、擬似コードを投稿してみたいが、それはDataMapperの関係のものは本当に緻密で複雑だ:(
実際には、最後に先行するスラッシュを削除する必要があるので、私が投稿するコードには欠陥があります。値の間に結合されているだけではありません。 – d11wtq
「特別な」部分について詳しく説明できますか?/x /は、特別なものの前に、特別なものの後に、あるいは値の間に特別なものがある必要がありますか? –
/x /は特別な*の後に*する必要がありますが、出力文字列の最後で終わるべきではありません。中間にのみ表示するべきです( 'Array#join'のように)。 – d11wtq