私はこの問題を投げ捨てて、人々がどのような洗練された解決策を考え出すことができるかを見て、うまくいけば、その過程でいくつかの新しい Ruby のトリックを学ぼうと考えました。
最大長が 140 文字の Twitter メッセージを作成するコンテキストで問題を設定します。text_a (必須)、text_b (オプション)、文字列を返す関数をトリガーするブール値 (オプション) の 3 つの入力から 140 文字以内のツイートを配信する簡潔な関数を探しています。
(問題の焦点ではないので、私は twitter-text gem を使用して、バイト、文字、およびエンコーディングの問題を解決しました。)
主な制約は、必要な最大長を達成するために切り捨てる必要があるのは 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
特に複製では醜いです。アイデア?