我将在生成推特消息的上下文中设置问题, 最大长度为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
这很难看,尤其是复制时。想法?
答案 0 :(得分:0)
为什么不首先正确构建字符串?
def tweet(text_a, text_b=nil, suffix=false)
text = ""
text << " #{text_b}" if text_b
text << get_suffix if suffix
space = Twitter::Validation::MAX_LENGTH - Twitter::Validation.tweet_length(text)
raise "too long" unless space > 0
"fixed preamble #{text_a}"[0, space] + text
end