我编写了一个程序,在其中操纵了许多BigInt
和BigUint
值并执行了一些算术运算。
我在经常使用BigInt::from(Xu8)
的地方生成了代码,因为不可能直接添加不同类型的数字(如果我理解正确的话)。
我想减少代码中BigInt::from
的数量。我想到了一个“包装”此功能的函数,但我需要将每种类型的函数转换为BigInt
/ BigUint
:
fn short_name(n: X) -> BigInt {
return BigInt::from(n)
}
X
是我要转换的每种类型。
我找不到与Rust的静态类型化哲学没有矛盾的解决方案。
我觉得我对特质有些缺失,但是我对特质不是很满意,也没有找到使用特质的解决方案。
我要在Rust中做一些不可能的事情吗?我是否缺少一个明显的解决方案?
答案 0 :(得分:3)
要回答这一部分:
我在经常使用
var file = event.target.files[0]; var sliced = file.slice(0, 2048); // Pick a size that you're ok with // NOTE: `await` keyword requires transpiling (Babel) for IE11, // and to be inside an async function. An alternative is: // sliced.text().then(function(text) { console.log(text); }); var text = await sliced.text(); console.log(text);
的地方生成了代码,因为不可能直接添加不同类型的数字(如果我理解正确的话)。
相反,如果您查看BigInt::from(Xu8)
的文档,则会看到许多BigInt
:
impl Add
,依此类推。第一个允许调用impl<'a> Add<BigInt> for &'a u64
impl Add<u8> for BigInt
,第二个允许a_ref_to_u64 + a_bigint
(并且都将a_bigint + an_u8
设置为OutputType
)。添加它们之前,无需将这些类型转换为BigInt
!而且,如果您希望方法处理任何此类类型,则只需要一个BigInt
绑定(类似于Add
绑定in Frxstrem's answer)即可。当然,如果您想进行许多这样的操作,From
可能最终更具可读性。
答案 1 :(得分:2)