有人能解释一下“已读帖子”TL3升级的逻辑吗?

有一段代码一直让我很困惑:

我绞尽脑汁也想不明白,为什么要把时间段内发布的帖子数量乘以所需阅读帖子的百分比,然后取最小值。如果这里的意图是计算已读帖子的比例,那么难道不应该是“已读帖子数 / 帖子总数”,再乘以 100 吗?

假设在过去 x 天内共有 9 个帖子,而设置仅要求阅读 2 个,那么既然 2 小于帖子上限,该方法不应该直接返回 2 吗?

供参考,以下是所有相关数值:

[2] pry(main)> TrustLevel3Requirements.num_posts_in_time_period.to_i
=> 9
[3] pry(main)> SiteSetting.tl3_requires_posts_read.to_f
=> 2.0
[4] pry(main)> (
[4] pry(main)>         TrustLevel3Requirements.num_posts_in_time_period.to_i *
[4] pry(main)>           (SiteSetting.tl3_requires_posts_read.to_f / 100.0)
[4] pry(main)>       ).round
=> 0
[5] pry(main)> 9*0.02
=> 0.18
[6] pry(main)> SiteSetting.tl3_requires_posts_read_cap
=> 2000

我是否误解了该方法的意图?谢谢。

tl3_requires_posts_read 站点设置是一个百分比。假设它是 10。虽然上限将要求限制在合理的范围内。假设上限是 100

“用户必须阅读该期间内所有帖子的 10%,但最多不超过 100 篇。”

假设该期间内发布了 500 篇帖子。

在这种情况下,需要阅读 50 篇帖子才能满足要求(这些帖子的 10%)

算术计算通过 500 * (10.0/100.0) 进行,得到结果 50

上限设置了一个上界。

如果你的上限大于 50(比如 100),那么它就没有影响。

[50, 100].min 返回 50

但如果某个月有 100,000 篇帖子呢?在这种情况下,如果没有上限,某人必须阅读 10,000 篇帖子才能满足要求。

100 的上限将其控制在合理范围内

[100000 * (10.0/100.0), 100].min 返回 100

这说得通吗?

好吧,我想下次我得仔细阅读设置说明了。这完全说得通,谢谢!

是的,tl3_requires_posts_read 这个名字确实可以改得更贴切一些,比如 tl3_requires_percent_posts_read