我想我会抛出这个问题,看看人们能想出什么优雅的解决方案,并且在这个过程中,希望能学到一些新的 ruby 技巧。
我将在生成 twitter 消息的上下文中设置问题,该消息的最大长度为 140 个字符。我正在寻找一个简洁的函数,它将从三个输入中提供不超过 140 个字符的推文:text_a(强制)、text_b(可选)、触发返回字符串的函数(可选)的布尔值。
(我使用 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
这很丑陋,尤其是在重复的情况下。想法?