私はこの問題を投げ捨てて、どのような優雅なソリューションの人々が何かを見いだすことができると思った。 はプロセス中でうまくいけば新しいルビーを学ぶだろう トリック。ruby:多くの可変長文字列から構成された長さ制約付きの文字列を構築する
twitterメッセージを生成するコンテキストで、最大長さが140文字の という問題を設定します。私は の3つの入力から140文字以内のツイートを提供する簡潔な 関数を探しています:text_a(必須)、text_b(オプション)、ブール値 は文字列を返す関数をトリガーします(オプション)。
(私はそれが問題の焦点ではないとして、競技外バイト、CHAR、およびエンコーディングの問題 を取るためにさえずりテキスト宝石を使用しました。)
主な制約が達成していることです必要な最大長は、 が切り捨てられなければならないtext_aです。
長めのサンプルコード(作業中です)は、うまくいけば が要件を明確にしています。
# encoding: utf-8
require 'twitter-text'
def tweet(text_a, text_b=nil, suffix=false)
text = "fixed preamble #{text_a}"
text << " #{text_b}" if text_b
text << get_suffix if suffix
return text unless Twitter::Validation.tweet_invalid?(text) == :too_long
excess_length = Twitter::Validation.tweet_length(text) - Twitter::Validation::MAX_LENGTH
text_a = text_a[0..-(excess_length + 1)]
text = "fixed preamble #{text_a}"
text << " #{text_b}" if text_b
text << get_suffix if suffix
text
end
def get_suffix
" some generated suffix"
end
特に重複していると醜いです。アイデア?
上記のコードを複製するのではなく、 'gsub''" fixed preamble#{text_a} "'を切り詰めたバージョンで使用するのはなぜですか? –
したがって: 'text.gsub(text_a、text_a [0 ..-(excess_length + 1)])' gsubはすべての出現を置き換えますので、text_bおよび/またはsuffixを叩くことはできません。 – auxbuss
ジョブに 'gsub'を使うのは本当に悪い考えです。特に' text_a [0 ..-(excess_length + 1)] + text [text_a.size ..- 1] ' –