C填充一个Lua表

Lua 数据类型 —— 表 表永远是匿名的,表本身和保存表的变量之间没有固定关系。对于一个表而言,当程序不再有变量指向他时,垃圾收集器会最终删除这个表并重用其占用的内存。Lua 不会进行隐藏拷贝或创建新表,操作的都是指向表的指针。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持)公众号搜索 “江澎涌” 可以更快的获取到后续的更新文章。 阅读详情

在将mysql中记录集读取出来的时候,我们需要将数据从libmysql这个C库中读取到mysql数据,然后将其构造成lua的表。这里将会讲解一下C函数如何构Lua表的实例

// main.cpp
#include <iostream>
#include "lua.hpp"

int main(int argn, char *argv[])
{

    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dofile(L, "test_lua.lua");

    lua_getglobal(L, "dbcb");
    lua_pushinteger(L, 88);
    lua_pushinteger(L, 99);
    lua_pushinteger(L, 10);
    lua_pushinteger(L, 11);

    {
        lua_newtable(L);
        {
            lua_pushstring(L, "field");
            lua_newtable(L);
            {
                lua_pushinteger(L, 1);
                lua_pushstring(L, "field_name");
                lua_settable(L, -3);
            }
            lua_settable(L, -3);

            lua_pushstring(L, "record");
            lua_newtable(L);

            {
                lua_pushinteger(L, 1);
                lua_newtable(L);
                {
                    lua_pushinteger(L, 1);
                    lua_pushinteger(L, 88);
                    lua_settable(L, -3);
                }
                lua_settable(L, -3);
            }
            lua_settable(L, -3);
        }
    }

    lua_call(L, 5, 0);

    lua_close(L);

Lua的脚本

-- test_lua.lua
function dbcb(id, result, sql_type, sql_cb,tbl)
    print(string.format("id: %d",id))
    print(string.format("result: %d",result))
    print(string.format("sql_type: %d",sql_type))
    print(string.format("sql_cb: %d",sql_cb))
    print(string.format("tbl.field[1]: %s", tbl.field[1]))
    print(string.format("tbl.record[1][1]: %d", tbl.record[1][1]))
end

输出的结果:

id: 88
result: 99
sql_type: 10
sql_cb: 11
tbl.field[1]: field_name
tbl.record[1][1]: 88
Lua 调用 C 模块中的函数 在之前 “Lua 模块与包” 的文章中,介绍了 Lua 通过require是如何引入一个模块的,其中 C 模块并未展开分享。今天就分享如何构建和使用一个 C 模块作为 Lua 的引入模块。Lua 通过注册 C/C++ 函数,进行感知 C/C++ 函数。一旦 C/C++ 函数用 Lua 表示和存储,Lua 就会通过对其地址的直接引用来调用,Lua 对这些 C/C++ 函数的调用不再依赖于函数名、包的位置以及可见性规则。Github传送门(如果对你有所帮助或喜欢的话,赏个star吧,码字不易,请多多支持) 阅读详情

相关推荐

Spring AI + RAG 构建电商智能客服:从 PDF 文档解析到精准问答的全链路实战

核心框架:向量数据库:- PostgreSQL + pgvector (生产推荐)- Redis Stack (轻量级方案)- ChromaDB (快速原型)文档解析:- Apache PDFBox: PDF 文本提取- Spring AI Document Readers: 结构化解析大模型:- 阿里云百炼 (DashScope)- 本地部署:Qwen/ChatGLM/*** 电商领域实体*/@Data@Builder@ToString/*** 商品类型。

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 380

Lua基础(七)表

一 表的特点 table是Lua'最复杂最强大'的数据结构,Lua本身并'不是面向对象'语言,面向对象中毒比较深的程序员'可以借助'table"完美地模拟"面向对象编程 +++++++++++++++'分割线'+++++++++++++++ 1)表'table'是Lua语言中'最主要'-->'唯一'的强大'数据结构' 2)Lua语言以一种'简单、统一、高效'的方式表示'数组、集合、记录'和其它数据结构 3)Lua语言中'表本质'是一种'辅助数组',类似awk中的"关联数组",数组的索引可.

wzj_110的博客 2937

五子棋ai:极大极小搜索和α-β剪枝算法的思想和实现(qt和c++)(一)引言和界面设计

引言 alphaGo击败围棋冠军李世石的新闻让我对棋类博弈产生了浓厚的兴趣,无奈本人不会围棋,但算是一个五子棋业余爱好者,于是乎希望通过实现一个五子棋ai来了解相关算法和知识。 五子棋在英文中又称Gobang,five-in-row,还有两个称呼:gomoku和renju(连珠)。我来简要介绍一下区别。由于五子棋已经被机器严格证明了是一种**“不公平”的游戏,先手黑子是绝对占优的,并且先手有必胜*...

livingsu的博客 1万+

Lua table(表)

在 Lua 中,表(table)是一种非常强大和灵活的数据结构,可以被用作数组、字典(哈希表)、集合等。表是由键值对组成的无序集合。Lua 的表可以包含任何类型的数据,并且支持动态增长和收缩。

qq_33240556的博客 1531

内窥镜胶囊(胶囊内镜)硬件方案

内窥镜胶囊(胶囊内镜)硬件方案 前言 说明:该方案为作者2018年上半年完成的第一版,后来搁置了一段时间,才重启这个项目。目前(2020.07)第二版已经快要完成。[联系v:1#7#6#3#3#3#5#0#8#7#0]先给一下第一版和第二版的基本参数。 第一版: 续航时间:3h 帧率:0.5fps 尺寸:12mm * 25mm 角度:45° 第二版: 续航时间:12h 帧率:2-6fps 尺寸:9.8mm * 25mm 角度:130° 第一版属于尝试版,整体方案不是很成熟。第二版这个数据就非常优秀了。我拿了

CrekerLi的博客 4776

知识推理——TransE(知识表示、知识嵌入)

知识图谱嵌入/表示方法 TransE

missyoudaisy的博客 1831

013-Lua 表(table)详解

表是 Lua 中唯一的数据结构,可以用来实现数组、字典、集合、对象等多种功能。,元表是一种可以改变表行为的机制。Lua 的表支持元表(metatable),可以通过元表实现运算符重载、自定义行为等功能。)、元方法、自定义行为和复杂表的操作。Lua 的表是一个非常强大的工具,可以实现从简单数组到复杂对象的各种功能。在弱键表中,如果表的某个键没有被其他地方引用,该键会被垃圾回收。在弱值表中,如果表的某个值没有被其他地方引用,该值会被垃圾回收。Lua 没有内置的表序列化功能,但可以通过递归实现简单的序列化。

小宝哥Code的专栏 2830

IDEA集成selenium自动化测试(Java+Selenuim+testNG+Maven)

文章目录写在前面01 | 新建Maven项目02 | idea集成Selenium03 | 写在前面 因为软件测试的需求和博主比较经常使用Java,于是,想在Idea中集成selenuim,用Java编写测试代码,因此有了这篇文章来记录一下过程。 资源指路: java使用selenium实现模拟浏览器操作API大全 模拟登录 TestNG入门教程 感谢上面博客的大佬。 01 | 新建Maven项目 不使用骨架创建,直接点击左侧Maven,然后一路next即可。 02 | idea集成Sele

aLinxi的博客 8279

【lua语言基础(三)】表和函数

本篇文章讲解lua语言中的表和函数的使用

杭电码农-NEO的博客 1685

GPS-SDR-SIM使用详解

GPS-SDR-SIM 是一款开源工具,能够生成 GPS 基带信号数据流,这些数据流可通过软件定义无线电(SDR)平台(如 ADALM-Pluto、bladeRF、HackRF、USRP 等)转换为射频(RF)信号。简单来说,它能模拟 GPS 卫星信号,帮助开发者或爱好者测试 GPS 接收设备的性能,而无需依赖真实的卫星信号。

qq_35621280的博客 1241

水文仿真软件:HEC-RAS (Hydrologic Engineering Center‘s River Analysis System)_(7).一维非稳态水力模型

自定义脚本是通过编程语言(如 Python)编写的一系列自动化任务,可以帮助用户更高效地处理数据和运行模型。编写脚本:使用 Python 或其他编程语言编写自定义脚本。集成脚本:将脚本集成到 HEC-RAS 中,实现自动化数据处理和模型运行。

kkchenjj的博客 929

lua和C++相互交换数据

下面的代码演示了在C++和lua脚本之间传递数据。首先在C++中创建一个table,添加元素,然后放置到lua的全局表中。在lua脚本中可以使用C++创建的这个表。然后在脚本中创建一个表,以脚本返回值的方式返回给C++,在C++中可以读取表中的值。 例子代码需要一个args.lua的lua文件,要手工创建,我把它放到了C盘根目录下。// cpplua.cpp : Defines

asmc51的专栏 1万+

2.0 电子凸轮 西门子1500电子凸轮使用研究1

本文研究了S7-1500T电子凸轮同步控制技术,通过仿真实验得出以下结论:1)通过比例系数可调整凸轮曲线形状;2)解除同步需调用从轴其他运动指令;3)详细阐述了凸轮同步的5个实施步骤。重点分析了三种同步类型(主值距离同步、动态参数同步和直接同步)的特点及应用场景,并探讨了缩放系数、偏移量等参数对凸轮曲线的影响。同时介绍了凸轮应用模式及常见异常处理方法,为工程应用提供了重要参考。

qq_34047402的博客 809

lua 和 C 语言进行交互 —— 如何传递table

http://blog.youkuaiyun.com/cjfeii/article/details/25593509 方法1: 采用 lua_pushstring/lua_pushnumber 传递key、value,然后通过 lua_settable 设置 table 中的kv对,like this: [cpp] view plain copy  print?

MyDriverC 1121

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Lua 程序设计:从 Lua 中调用 C 函数

文章目录从 Lua 中调用 C 函数C 函数C 模块 从 Lua 中调用 C 函数 扩展 Lua 的一项基本含义就是,应用程序可以注册新的 C 函数到 Lua 中。 当我们说 Lua 能够调用 C 函数,并不是意味着 Lua 能够调用任意的 C 函数。在上一章中,我们说过当从 C 语言中调用 Lua 函数时,必须遵循一个简单的协议向 Lua 传递参数以及获取返回结果。同样,对于一个能被从 Lua 调用的 C 函数,它也必须遵循一个获取参数和返回结果的协议。此外,还必须注册这个 C 函数,也就是将以某种方式

alenliu's blog 1005

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C函数如何返回参数lua使用

【代码】C函数如何返回参数lua使用。

最后一个bug的博客 1448

深度学习工具包 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性能优化

一、前言 Lua 是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏。 我认为最好的方式是在首次编写的时候按照最佳实践去写出高性能的代码,而不是编写了一堆垃圾代码后,再考虑优化。相信工作后大家都会对事后的优化的繁琐都深有体会。 二、使用 local 在代码运行前,Lua 会把源码预编译成一种中间码,类似于 Java 的虚拟机。这种格式然后会通过 C 的解释器进...

qq826364410的专栏 1954

从C调用Lua

LUA_C_API 如何使用CAPI存取操作Lua中的值,一组能使C与Lua交互的函数 Lua_C数据交互使用一个虚拟栈:luaState Lua和C的差异:1、Lua使用垃圾回收,C使用显式的内存释放  2、Lua使用动态类型,C使用静态类型 lua头文件介绍: lua.h定义了lua提供的基础函数,包括创建Lua环境(LuaState),调用Lua函数(lua_

蚂蚁的坚持 1022

C调用Lua中的函数解析table

Passing Tables to Lua Functions A use case that happens often is the passing of tables to and from Lua functions. How is that handled? There are a few idioms you see over and over again to make it ...

weixin_30920597的博客 324

lua:lua与C/C++程序的整合

https://www.cnblogs.com/dimin/p/7838674.html https://blog.youkuaiyun.com/nekocode/article/details/7960371 lua与C/C++交互,主要靠lua API和向lua注册好的函数。如下图 注:LuaGlue就是让Lua脚本中可调用的C++函数的接口。即那些注册的函数。 这里起关...

a857351839的博客 240

lua C语言api学习4 编写C模块

lua C语言api学习4 编写C模块

sinat_41629921的博客 491

在c中调用lua函数,获取返回值等

偶们这次主要说说怎么由Lua定义函数, 然后在C或者C++中调用. 这里偶们暂不涉及C++的对象问题, 只讨论调用函数的参数, 返回值和全局变量的使用.   2.   这里偶们在e12.lua里先定义一个简单的add(), x,y为加法的两个参数,return 直接返回相加后的结果.   例e12.lua   -- add two numbers   function ad

cws1214的专栏 1万+

c语言中怎么编程添加table,Lua教程(三):C语言、C++中调用Lua的Table示例

从写上一篇Lua的文章到现在,已经过去半月有余了,是时候让自己的Lua状态refresh一下了。本教程将介绍Lua的栈及基本栈操作,同时还有如何在C/C++代码里面读取Lua的Table。理解Lua栈Lua通过一个“虚拟栈”与C/C++程序进行数据交互,所有的Lua C API都是通过操作这个栈来完成相应的数据通信。 Lua的这个“虚拟栈”解决了C/C++程序与Lua程序通信的两大问题:1.Lua...

weixin_35679269的博客 784

如何深入理解Lua数据结构和内存占用?

** 如何深入理解Lua数据结构和内存占用? ** 导语 Lua底层数据结构的内存动态分配,一般情况下不太好估算内存占用。腾讯游戏学院专家Ross在本文剖析lua常见数据结构string和table的底层实现原理,并从中找到一般性的内存占用估算方法。 由于lua是一个跨平台的脚本语言,会根据平台位数(16bitbit)、平台类型(linuxwindows)、语言标准(C89C99)、以及编译参数等...

ft1874478a的博客 7660

lua5.1函数解析

lua 函数

u014397684的博客 611
上一篇: redis多实例配置
下一篇: Unity3D-Roll-a-ball(1)
erlang_hell
博客等级 码龄14年 57粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值