So something like this would be possible:
/datum/blackbox
var/value
/datum/blackbox/New(number)
value = number
/datum/blackbox/asNum() // like js valueOf
return value
var/datum/blackbox = new(5)
var/test = 5 + blackbox // 10
// or even like this
var/alist/L = alist("one" = new/datum/blackbox(5), "two" = new/datum/blackbox(10))
values_sum(L) // 15
values_product(L) // 50
I tried to do this with current operator reloading, but it does not work properly in all cases. For example, operator order is important, so i can't overload datum's "+" and do
5 + blackbox
because this give me type mismatch runtime. And things like values_sum() don't work either.