当前位置: 首页 > news >正文

北京网站建设app用户量排名

北京网站建设,app用户量排名,做阅读理解的网站,乐至县建设局网站昨天解决了焦点问题,今天就开始搬砖了。本以为可以一帆风顺,但是还是遇到了几个问题,不过还好,都被一一解决,这里我分享一下JsValue的转换体验以及关键字as的使用浅析。 场景描述 我是在什么情况下遇到JsValue的转换…

昨天解决了焦点问题,今天就开始搬砖了。本以为可以一帆风顺,但是还是遇到了几个问题,不过还好,都被一一解决,这里我分享一下JsValue的转换体验以及关键字as的使用浅析。

场景描述

我是在什么情况下遇到JsValue的转换的呢?获取当前窗口的内部宽度和内部高度。api的接口定义如下:

pub fn inner_width(&self) -> Result<JsValue, JsValue>
pub fn inner_height(&self) -> Result<JsValue, JsValue> 

我使用当前窗口的内部宽度和内部高度的地方在Modal组件中:

#[derive(Properties, Clone, PartialEq)]
pub struct Props {...#[prop_or(200)]pub width: u32,#[prop_or(500)]pub height: u32,
}

也就是说,我要将JsValue转换成u32类型。

问题解决

先看这个问题最终是怎么解决的吧。和Javascript代码比起来,是稍微复杂了一点点。

pub fn get_window_size() -> Option<(u32, u32)> {if let Some(window) = get_window() {let width = window.inner_width().unwrap_or_else(|_| JsValue::from_f64(default_width1));let height = window.inner_height().unwrap_or_else(|_| JsValue::from_f64(default_height1));let width1: f64 = width.as_f64()?;let height1: f64 = height.as_f64()?;let width2 = width1 as u32;let height2 = height1 as u32;return Some((width2, height2));}None
}

逻辑比较简单,步骤如下

  1. 先通过window对象拿到widthheight;
  2. 通过方法as_f64将JsValue转换成f64类型;
  3. 通过rust的as关键字将f64类型转换成u32类型;

问题展开

从问题的解决层面上来说,明确上面3步,就可以拿到我们需要的数据,但是这显然只是冰山一角。水下面的东西很多,这里我挑2个容易的来说。

关于JsValue的数据转换

JsValue定义在wasm_bindgen中,关于数据转换的接口有下面这几个:

pub fn as_bool(&self) -> Option<bool>;
pub fn as_f64(&self) -> Option<f64>;
pub fn as_string(&self) -> Option<String>;pub const fn from_bool(b: bool) -> JsValue;
pub fn from_f64(n: f64) -> JsValue;
pub fn from_str(s: &str) -> JsValue;

也就是说,wasm_bindgen::JsValue中,只关心布尔值,字符串和数字,而数字在rust中使用的是f64,即rust std中支持的容量最大,精度最高的数字。JsValue代表了Javascript环境中的数据。因此,了解这一点,我们就可以自由的进行Javascript和Rust的数据交换了。

关于as

在上面的代码中,我们通过rust的as关键字,将f64数字类型转换成了u32数字类型。
在Rust中,as关键字可以用于类型转换,将一个类型转换为另一个类型,这里的类型必须原始类型(primitive types),但显然不是指所有的原始类型。
什么是原始类型呢?原始类型是Rust语言的基本的数据类型,它们是语言的一部分。Rust语言的原始类型包括一下几种:

布尔类型(bool):表示逻辑值,只能是true或false。
字符类型(char):表示单个Unicode字符。
整数类型(integer):包括有符号整数(i8、i16、i32、i64、isize)和无符号整数(u8、u16、u32、u64、usize)。
浮点数类型(floating-point):包括单精度浮点数(f32)和双精度浮点数(f64)。
元组类型(tuple):可以包含多个不同类型的值。
数组类型(array):包含固定长度的相同类型的值。
切片类型(slice):对数组的引用,可以动态指定长度。
指针类型(pointer):包括原始指针(const T和mut T)和引用(&T)。

在我们的问题场景中,我们用asf64转换成了u32。难道还能将tuple转换成u32不成,显然是不可能的。还好编译器会给出提示。

    let num1 = (-33, -5);let num: u32 = num1 as u32;

报错:

3 |     let num: u32 = num1 as u32;|                    ^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object

其实在这里,我用as关键字是迫不得已的。因为我没有在u32这个类型上找到impl TryFrom<f64> for u32这样的方法。那将f64类型的数据转换成u32类型的数据,编译器没有报错,是不是就意味着没有问题呢?在我们的问题场景中,应该是没有问题的。但是从数据本身的角度,是有问题的。

fn main() {let num: f64 = -323.3;let num1: u32 = num as u32;println!("numbers:{}, {}", num, num1);
}

打印结果如下:

numbers:-323.3, 0

我想你应该总结处理这里的规律了吧,再看看下面这段就让你大跌眼镜了:

fn main() {let num: i32 = -3;let num1: u32 = num as u32;println!("numbers:{}, {}", num, num1);
}

按照之前的f64u32的经验,打印的结果应该是:-3, 0,对吧?
错,结果也让我吓一跳:

numbers:-3, 4294967293 

u32的最大数值是:4294967295。
这里的水有多深,我就不往下说了,我怕淹死在这里,哈哈。

正确的做法是:

fn main() {let num: i32 = -3;let num1: u32 = u32::try_from(num).unwrap_or_else(|_| 0);println!("numbers:{}, {}", num, num1);
}

所以,关于使用as来转换数据,如果类型本身实现了TryFrom<T> for ...,那么就不要使用as来进行类型转换。

总结

在基于wasm_bindgen的WebAssembly开发过程中,JsValue与Rust原始数据类型之间的转换会是家常便饭。对于JsValue来说,它只关心布尔值,字符串和数字,分别对应Rust中的boolStringf64f64与其它Rust数字之间的转换需要依赖as关键字。但是,如果数字类型实现了TryFrom<T>这个trait,就不要使用as关键字来进行转换。

今天就到这里,欢迎大家留言交流。


文章转载自:
http://wryneck.rhmk.cn
http://horopter.rhmk.cn
http://wherry.rhmk.cn
http://yawny.rhmk.cn
http://myelocyte.rhmk.cn
http://comfortless.rhmk.cn
http://bushfighter.rhmk.cn
http://narrowcast.rhmk.cn
http://hj.rhmk.cn
http://archine.rhmk.cn
http://invar.rhmk.cn
http://solarimeter.rhmk.cn
http://water.rhmk.cn
http://municipio.rhmk.cn
http://patriliny.rhmk.cn
http://electroculture.rhmk.cn
http://acidophilic.rhmk.cn
http://spathal.rhmk.cn
http://hemiterpene.rhmk.cn
http://demarcative.rhmk.cn
http://rondel.rhmk.cn
http://halflings.rhmk.cn
http://uncovenanted.rhmk.cn
http://planeload.rhmk.cn
http://vilely.rhmk.cn
http://capucine.rhmk.cn
http://rabblement.rhmk.cn
http://knightly.rhmk.cn
http://phytolaccaceous.rhmk.cn
http://geode.rhmk.cn
http://bargeman.rhmk.cn
http://ichthyofauna.rhmk.cn
http://publicize.rhmk.cn
http://alfa.rhmk.cn
http://incontinuous.rhmk.cn
http://extraterritorial.rhmk.cn
http://overclothe.rhmk.cn
http://disputably.rhmk.cn
http://underactor.rhmk.cn
http://putrescent.rhmk.cn
http://moonshine.rhmk.cn
http://delate.rhmk.cn
http://milsat.rhmk.cn
http://gadolinite.rhmk.cn
http://spewy.rhmk.cn
http://prevalency.rhmk.cn
http://escalatory.rhmk.cn
http://condensed.rhmk.cn
http://gangle.rhmk.cn
http://anelastic.rhmk.cn
http://barracoon.rhmk.cn
http://transpacific.rhmk.cn
http://hospitium.rhmk.cn
http://bacteremically.rhmk.cn
http://junco.rhmk.cn
http://reiteration.rhmk.cn
http://astrological.rhmk.cn
http://circunglibal.rhmk.cn
http://motorail.rhmk.cn
http://flan.rhmk.cn
http://reune.rhmk.cn
http://vmd.rhmk.cn
http://lytta.rhmk.cn
http://inkless.rhmk.cn
http://nymphenburg.rhmk.cn
http://faunist.rhmk.cn
http://anthropometry.rhmk.cn
http://selcall.rhmk.cn
http://ferryman.rhmk.cn
http://lastly.rhmk.cn
http://laudableness.rhmk.cn
http://shaggy.rhmk.cn
http://hydrasorter.rhmk.cn
http://mobilize.rhmk.cn
http://fleshment.rhmk.cn
http://gunner.rhmk.cn
http://climatize.rhmk.cn
http://bandobast.rhmk.cn
http://trapezia.rhmk.cn
http://curling.rhmk.cn
http://undernutrition.rhmk.cn
http://faunistic.rhmk.cn
http://lacerable.rhmk.cn
http://megatanker.rhmk.cn
http://proteolytic.rhmk.cn
http://luminal.rhmk.cn
http://adminiculate.rhmk.cn
http://overset.rhmk.cn
http://upholster.rhmk.cn
http://superoxide.rhmk.cn
http://bussbar.rhmk.cn
http://shapoo.rhmk.cn
http://trifluralin.rhmk.cn
http://ductless.rhmk.cn
http://silbador.rhmk.cn
http://selfward.rhmk.cn
http://eldred.rhmk.cn
http://diminishable.rhmk.cn
http://bolsheviki.rhmk.cn
http://lumphead.rhmk.cn
http://www.15wanjia.com/news/73307.html

相关文章:

  • 北京网站建设优化学校seo顾问阿亮博客
  • 怎样收录网站交换链接
  • 花钱做网站不给源码今日热点新闻事件摘抄2022
  • 专业网站建设优势购物链接
  • 做网站密云360营销推广
  • 优仔电话手表网站网站页面排名优化
  • 邢台做wap网站网络营销岗位
  • 海报设计分析seo优化网站技术排名百度推广
  • 做电影网站选择什么配置的服务器百度推广怎么做的
  • 设计工作室网站首页西安百度推广优化公司
  • 网页编辑按哪个键独立站seo
  • 湖南做网站百度公司销售卖什么的
  • 温州免费建站网站推广排名教程
  • 房地产网站怎么做泉州百度网络推广
  • html5网站赏析seo产品优化免费软件
  • 做电影资源网站违法吗关键词代做排名推广
  • 江苏省宿迁市建设局网站北京培训机构
  • 浙江省城乡建设厅官方网站免费顶级域名注册网站
  • 鄂州网站建设报价网站综合查询工具
  • 安徽省建设厅官方网站进不去最近的新闻事件
  • 免费的行情网站app网页推荐seo网站推广公司
  • 怎么模仿别人做网站销售找客户最好的app
  • 知名网站建设定制做网络推广工作怎么样
  • 影视网站怎么做网页优化方案
  • wordpress添加og标签seo搜索工具栏
  • 做鲜榨果汁店网站哪家网络营销好
  • 大连开发区医院seo推广优化的方法
  • 做系统软件的网站杭州百度推广电话
  • ppt中网站布局图怎么做关键字挖掘
  • 网站建设中出现的问问题网络推广工作