_index和__newindex元方法

理解Lua中的__index和__newindex 主要介绍了理解Lua中的__index和__newindex,本文给出了三段代码来讲解__index和__newindex,代码中包含详细注释,需要的朋友可以参考下 立即下载

这两天一直在折腾lua了,到现在才大概明白一点元方法的含义,恩,应该是我太笨了,现在,呵呵~

 

首先,

__index: 索引访问table[key]
function gettable_event (table, key)

local h

if type(table) == "table" then 

local v = rawget(table, key)

if v ~= nil then

return v

end

h = metatable(table).__index 

if h == nil then

return nil

end

else

h = metatable(table).__index

if h == nil then

error(...); 

end

end

if type(h) == "function" then 

return (h(table, key))     -- 调用处理程序

else

return h[key]    -- 对它重复上述操作

end

end

 

 

__newindex: 索引赋值table[key] = value。 
function settable_event (table, key, value)

local h

if type(table) == "table" then

local v = rawget(table, key) 

if v ~= nil then 

rawset(table, key, value)

return

end

h = metatable(table).__newindex

if h == nil then

rawset(table, key, value)

return

end

else

h = metatable(table).__newindex

if h == nil then

error(...)

end

end

if type(h) == "function" then

h(table, key,value)    -- 调用处理程序

else

h[key] = value      -- 对它重复上述操作

end

end

 

其中,关于rawget,rawset:

 

Gets the real value of table[index], without invoking any metamethod. table must be a table; index may be any value.

得到table在index索引出的值,并且不会触发元方法。

Sets the real value of table[index] to value, without invoking any metamethod. table must be a table, index any value different from nil, and value any Lua value.

This function returns table.

 

 

给一个表中的非空索引赋值,函数返回这个表

webpack性能优化-optimization.splitChunks.chunks中的“all“、“async“和“initial“ 最初,chunks(以及内部导入的模块)是通过内部 webpack 图谱中的父子关系关联的。CommonsChunkPlugin 曾被用来避免他们之间的重复依赖,但是不可能再做进一步的优化。 ——摘自 webpack 从 webpack v4 开始,移除了 CommonsChunkPlugin,取而代之的是 optimization.splitChunks。 而关于 optimization.splitChunks 中的chunks,webpack 官方文档却没有很好的进行举例解释,只说明了 async. 阅读详情

相关推荐

Dify 深度进阶:从入门到精通AI应用构建

《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。

同名公众号:dify实验室 1950

__index和__newindex元方法详解

son = { age=13 } father={ age = 18, xingshi = "Simoon", sayHello = function() print("大家好,我是父表") end } local mt = { __index = father, __newindex = function(table,key,value) print(key.."字...

MySql数据库的学习博客 680

ChatGPT and Claude国内使用站点

这篇博客介绍了不同的AI聊天平台和定价信息,主要对比了ChatGPT和Claude两款产品。文章列出了多个提供聊天服务的AI平台,包括RawChat、ChatGPTPlus、ChatOpens、Wildcard和2233.ai等,并提供了每个平台的网页链接和定价详情。特别关注了Claude平台,介绍了其普通账号与会员账号的不同,以及相关的定价信息。此外,还提到了一些虚拟卡定价和服务细节,为用户选择合适的AI服务提供了多种参考。

nisidjndn的博客 1万+

lua __index和__newindexde 区别

lua为了实现类似于c#继承的功能,有setmetatable函数,为一个子脚本设置一个父脚本,这时候就会用到__index和__newindex属性。   __index:当子脚本不存在被访问的元素的时候,lua就会调用__index,去父脚本里面查找该元素。 __newindex:当子脚本不存在被访问的元素,我们却给该元素赋值的时候,默认我们没有给__newindex赋值,lua会直接修...

gepengmiss的博客 4748

【干货攻略】Oracle报错篇 ORA-01378 磁盘扇区大小不兼容问题

本期将为大家分享“ORA-01378 磁盘扇区大小不兼容”报错的问题解决方案。

PWY13148的专栏 1437

实战指南 | 快速修复Adobe Acrobat 2020安装过程中的常见注册表错误

本文提供了Adobe Acrobat 2020安装过程中遇到“无法打开键”注册表错误的详细修复指南。通过安全编辑注册表,精准定位并删除残留键值,可快速解决此常见安装报错,确保软件顺利安装。同时,文章也介绍了其他安装问题的应对策略与预防措施。

weixin_29200485的博客 560

对Lua中__index和__newindex的基础理解

对Lua中的__index和__newindex基础理解__index 主要用于对table的查询__newindex 主要用于对table的赋值更新rawset table对于元素的操作有 查询 和 赋值 两种。 __index和__newindex都是元方法,存在于元表中 这两种方法都不一定是一个table,也有可能是一个函数 __index 主要用于对table的查询 __index 主要用于对table的查询: 如果子表中的元素不存在,lua就会调用元表中的__index,去元表中查找对应的元素。

weixin_38495031的博客 2781

Kubernetes集群资源优化实战:Volcano调度器如何帮你省下30%GPU算力

本文详细介绍了如何通过Volcano调度器的Binpack策略优化Kubernetes集群中的GPU资源利用率,解决AI模型训练中的资源碎片化问题。通过实战配置和调优指南,帮助用户提升30%的GPU算力利用率,显著降低任务等待时间和硬件成本。

weixin_30832143的博客 506

Lua中强大的元方法__index详解

今天要来介绍比较好玩的内容——__index元方法 1.我是备胎,记得回头看看 咳咳,相信每一位女生都拥有或者不知不觉中拥有了一些备胎,啊,当然,又或许是成为过别人的备胎。 没有备胎的人,就不是完整的人生。(小若:停!)   我们来想象一下,如果对一个table进行取值操作,但是table根本就没有这个值呢? 比如: 复制代码 代码如下:     local t = {

天涯路的专栏 1628

YOLOv8与UNetV2融合:一种面向目标检测与图像分割的混合方法【附核心代码】

我们提出了一种基于YOLOv8和UNetV2相结合的混合架构。该架构利用YOLOv8作为主干进行目标检测,同时在YOLOv8的特征提取过程中,引入UNetV2来进行图像分割任务的增强。在该架构中,YOLOv8负责大范围目标检测和位置预测,而UNetV2则在检测网络的特征图基础上,通过其高效的上下文信息提取和细节恢复能力,进一步优化分割任务。在本文中,我们提出了一种改进YOLOv8的方法,通过引入图像分割网络UNetV2来提高图像分割检测性能。

一键难忘的博客 3524

Python 爬虫 + 数据分析:社会调查数据抓取与结果可视化分析

在当今数字化时代,数据已成为推动社会发展的关键资源之一。无论是市场调研、学术研究还是政策制定,社会调查数据都扮演着至关重要的角色。通过 Python 爬虫技术,我们可以高效地获取这些数据,并结合数据分析与可视化工具,深入挖掘数据背后的价值。本文将通过一个完整的实战项目,带你掌握如何使用 Python 爬虫抓取社会调查数据,并进行可视化分析。

yansideyucsdn的博客 126

lua元表 __index 和__newindex 全解

我自己学习后总结一下lua元表中的__index 和 __newindex(如果有错误,请大神指出,虚心求教) 1.__index 主要功能:1.返回一个默认的值代替nil(__index是一个function)(这里解释下什么是默认的值如下)2.返回一个表中没有固定key 的值(这里的__index是一个表) 2.__newindex 主要功能:1.设置表的权限不允许修改表中数据。2.增加修改表中数据并且留存更改信息

ChenLL916的博客 1771

高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化

相比于国外FPGA厂商EDA开发环境,几个G到几十个G的大小,高云云源软件安装包也很小巧,界面也很简洁,综合速度非常快,是我没想到的,好像在使用单片机一样,点一下就编译完成了,以本文简单的LED示例工程为例,比特流文件几乎在几秒钟内生成;无论是下载比特流文件到RAM还是Flash中,速度都很快,而且只有一种fs程序文件格式,不用再进行bit/mcs转换;云源软件自带的编辑器也很好用,和Notepad++界面差不多,而且快捷键很方便,具有基本的自动补全功能。

whik1194的博客 5460

关于Lua重要的元方法__index 和__newindex

元表和元方法是lua进行面向对象编程的很重要的方法,所以 花时间研究了一下。 (元方法,是在设置元表之后在元表中查找的方法,使用之前一定要setmetatable 或者用getmetatable检查是否有元表) __index方法(主要是查找时) 当调用一个table的索引值不存在时,lua会查找该table的__index方法,__index方法可以是函数,也可是一个table; 举例:...

Clengupup的博客 1209

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Lua __index元方法和__newindex元方法 C# get set 实现

当访问一个表中不存在的字段时会得到nil。这是正确的,但不是完整的真相。实际上,这些访问会引发解释器查找一个名为__index的元方法。如果没有这个元方法,那么像一般情况下一样,结果就是nil;否则,则由这个元方法来提供最终结果。假设我们需要创建一个UI界面,包括位置x,y 宽高 width,height,当我们创建一个窗口的时候需要放回默认的值大小 __newindex元方法 元方法__newindex与__index类似,不同之处在于前者用于表的更新而后者用于表的查询。当对一个表中不存在的索引赋值

weixin_41316824的博客 423

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

lua __index __newindex _call元方法的理解

local class_a = {} local class_b = { b = 2 } class_b = setmetatable( class_b, { -- __index则用来对表访问,访问class_b中值时,不存在时则会执行class_a -- 例:先从class_b寻找key对应的value 若不存在则去元表class_a中寻找 -- __index = class_...

qq_30372933的博客 2931

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Lua中__index和__newindex之间的沉默与合作

为不想在一篇文章里挤太多知识点,所以,有些小知识点就集合到这样的文章里吧~ 1.沉默技能——拒绝__index和__newindex效果 虽然__index和__newindex是很好用的功能,但是,有时候我们又希望很纯粹地去调用table或者给table赋值。 那,这时候怎么办?给table重新设置一个元表?不,这个做法很糟糕~ 于是,体贴的Lua又给我们提供了这样的调用

晴天的专栏 1045

lua 关于__index,__newindex的理解

table存在两种行为:查询和修改(赋值),我们可以通过元方法__index和__newindex来改变table的这两种行为。 __index主要用于table的查询 table[key] 的访问过程,首先检查table表中是否存在key的字段,如果有则返回,否则检查是否有__index的元方法,没有返回nil,有则查找元方法。 __index元方法可以是不一定是一个函数,还可以是一个

2月7号遇见你 1万+

lua _index,newindex,rawget和rawset

1 零、元表的概念 对Lua中元表的解释: 元表能够改变表的行为模式。ide 这里举个例子: Window = {} Window.prototype = {x = 0 ,y = 0 ,width = 100 ,height = 100,} Window.mt = {} function Window.new(o) setmetatable(o ,Window.mt) return o end Window.mt.__index = Window.prototype Window..

hjssss的博客 332

Lua _index、_newindex

_index元方法主要用于table的查询 table[key]的访问过程,首先检查table表中是否存在key的字段,如果有则返回,否则检查是否有_index的元方法,没有返回nil,有则查找元方法 _index元方法可以是不一定是一个函数,还可以是一个table。如果是一个函数,则以table和不存在的key作为参数返回该函数 例如:_index=function(t,key) 如果是一个table时,就以相同的方式来访问这个table(即传入key访问元方法的table,如果存在则返回值,反之返回ni

qq_30459113的博客 356

__newindex

前面说过__index,与__index不同的是,__newindex用于更新,而__index用于查找。当对一个table不存在的字段进行赋值时,就会查找__newindex元方法。如果存在这个元方法,就执行它。如果这个元方法是table,那么久对此table赋值,而不是原table。 window = {} window.prototype = {x = 20, y = 30, wid...

weixin_30482181的博客 83

Lua中__index和__newindex的意义和用法

Lua中的__index和__newindex是重要的元方法,用于自定义表的读取和写入行为。__index在访问表中不存在的键时触发,可用于实现继承、默认值等功能;__newindex在给不存在的键赋值时触发,常用于实现代理、只读表等特性。两者核心区别在于:__index处理读取操作,接收表名和键名两个参数;__newindex处理写入操作,接收表名、键名和值三个参数。通过合理使用这些元方法,可以实现面向对象编程、数据验证、配置管理等高级功能,是Lua元编程的核心技巧之一。

weixin_46259189的博客 812

lua中__index、__newindex元方法

借鉴自:https://www.kancloud.cn/digest/luanote/119936https://blog.youkuaiyun.com/xocoder/article/details/9028347https://www.jb51.net/article/55155.htm __index元方法(索引查询): 默认情况下,当我们访问一个table中不存在的字段时,得到的结果时nil,但是...

寂蝶难双,窃窃思羽. 789

[Lua]表相关元方法

关于算术运算和关系元运算的metamethods都定义了错误状态的行为,他们并不改变语言本身的行为。针对在两种正常状态:表的不存在的域的查询和修改,Lua也提供了改变table的行为的方法。元方法是元表的方法。 _index 当我们访问一个表的不存在的域,返回结果为nil,这是正确的,但并不一定正确。实际上,这种访问触发lua解释器去查找__index metamethod:如果不存在,返回结...

超越 1758

__index和__newindex以及相关应用

元表 有必要先说下元表,英文名:metatable。开始见到这个词,并不是很能理解元表的含义。于是查询meta-前缀的含义:一般科学技术领域,metaXXX意思为XXX of/about XXX。英文解释:is a prefix meaning “referring to itself.” 简单来说就是复合。放在lua语言中的metable:table about table。也就是说一个tabl...

jxdwocao123的博客 997

15、Lua 元表(Metatable)

以上实例中表设置了元方法 __newindex,在对新索引键(newkey)赋值时(mytable.newkey = “新值2″),会调用元方法,而不进行赋值。当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键。如果__index包含一个表格,Lua会在表格中查找相应的键。从本文中我们可以知道元表可以很好的简化我们的代码功能,所以了解 Lua 的元表,可以让我们写出更加简单优秀的 Lua 代码。

深入Java世界:探索编程之美与技术深度 1238
上一篇: linux下和windows 下 snprintf函数的区别
下一篇: 遇到一个面试题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值