精华内容
下载资源
问答
  • ![前台层:](https://img-ask.csdn.net/upload/201506/05/1433510464_43340.jpg) ![中间层:]...!...现在的问题是如前台层那样。。。返回值没有value的定义,这个什么办?大家给帮帮忙,谢谢啊
  • gpio_get_value的定义

    万次阅读 2013-02-27 15:02:21
    gpio_get_value等一系列函数,并非linux标准函数,而是跟硬件相关。 通常我们说driver都是跟外围设备相关,所以需要我们自己开发,但是这次...有每个cpu平台都有自己定义的gpio_get_value,要继续查看到底是哪

    gpio_get_value等一系列函数,并非linux标准函数,而是跟硬件相关的。 通常我们说的driver都是跟外围设备相关的,所以需要我们自己开发,但是这次我们说到的gpio是跟soc相关的,其实也是需要自己定义的,只不过这个自己变成了soc的provider,比如高通,intel等等

    a)接口定义在.h文件

    有每个cpu平台都有自己定义的gpio_get_value,要继续查看到底是哪个.h文件,要看你现在用的是哪个cpu平台

    例如:intel:就是x86

    Gpio.h (z:\jb_intel\hardware\intel\linux-2.6\arch\x86\include\asm)


    b)具体实现在drivers\gpio里面


    ==============>

    gpio driver:

    drivers\gpio

    里面有各种平台的gpio.c文件,查看makefile,

    根据build 之后生成config,发现只有2个是被编译的,
    一个是gpiolib.c,这个是通用的,不是平台相关的
    另一个是,比如:obj-$(CONFIG_GPIO_LANGWELL) += langwell_gpio.o
    ==============>

    gpiolib.c

    int __gpio_get_value(unsigned gpio)
    {
    struct gpio_chip*chip;
    int value;


    chip = gpio_to_chip(gpio);
    WARN_ON(chip->can_sleep);
    value = chip->get ? chip->get(chip, gpio - chip->base) : 0; 

            我们最终要进入到get函数中,去进一步查看。但是首先要知道,是哪个chip的get 函数, 这个由上面的红色语句gpio_to_chip(gpio);得出
    trace_gpio_value(gpio, 1, value);
    return value;
    }
    EXPORT_SYMBOL_GPL(__gpio_get_value);



    其中语句:chip = gpio_to_chip(gpio);是为了得到当前的chip,进入她的函数定义里面查看

    static inline struct gpio_chip *gpio_to_chip(unsigned gpio)
    {
    return gpio_desc[gpio].chip;
    }

    继续查看gpio_desc 是从哪里来的,发现有个gpiochip_add 函数 有如下语句:

    gpio_desc[id].chip = chip;


    继续查看gpiochip_add被谁调用, 发现很多个gpio文件中有gpiochip_add,但是由于我们通过config文件已经知道,是:

    obj-$(CONFIG_GPIO_LANGWELL) += langwell_gpio.o

    langwell_gpio.c 


    发现调用gpiochip_add的地方有2处:

    1: platform_driver wp_gpio_driver (name=wp_gpio) 的probe函数

    2:    pci_driver lnw_gpio_driver (name=langwell_gpio) 的probe函数

    因为是x86平台我们可以猜想,应该是2,但是我们还是可以验证一下

    把设备连上pc,adb 进入

    sys/bus/pci/drivers/ 下有个langwell_gpio

    sys/bus/platform/drivers/下没有wp_gpio

    可以证实,我们用的是2


    继续查看probe 2 发现:lnw->chip.get = lnw_gpio_get;


    由此得知:

    gpio_get_value在intel平台上 最终调用了 lnw_gpio_get 来说实现。


    ========================================================================================================


    以上部分仍然处于 对接口的定义阶段,下面我们来看看具体 是怎么实现的

    static int lnw_gpio_get(struct gpio_chip *chip, unsigned offset)
    {
    void __iomem *gplr = gpio_reg(chip, offset, GPLR);//应该是映射   gpio对应的要操作的寄存器GPLR  的地址空间: GPLR, refer to  intel的spec, 一个寄存器:Monitor Pin State。

    return readl(gplr) & BIT(offset % 32);//读取GPLR寄存器之后,由于每个bit都代表一个gpio,所以与上BIT(该位gpio);

    //通过spec可知,Note: There are a total of 94 configurable Always-On GPIOs on GPIO controller 0. There is no gp_aon_15.

    //There are a total of 69 configurable GPIOs on GPIO controller 1. There is no gp_core[5..0],
    GP_Core[11..8], gp_core_[25..23] and gp_core[34]
    }



    =======================================================================================

    动态更改 gpio function:

    lnw_gpio_set_alt



    展开全文
  • element checkbox组件选中与未选中时对应的value定义 1、默认情况下:在el-checkbox元素中定义v-model绑定变量,单一checkbox中,默认绑定变量值会是Boolean,选中为true。 <template> <!-- `...

    element checkbox组件选中与未选中时对应的value值定义

    1、默认情况下:在el-checkbox元素中定义v-model绑定变量,单一的checkbox中,默认绑定变量的值会是Boolean,选中为true。
    <template>
      <!-- `checked` 为 true 或 false -->
      <el-checkbox v-model="checked">备选项</el-checkbox>
    </template>
    <script>
      export default {
        data() {
          return {
            checked: true
          };
        }
      };
    </script>
    
    2、checkbox-group元素能把多个 checkbox 管理为一组,只需要在 Group 中使用v-model绑定Array类型的变量即可。 el-checkbox 的 label属性是该 checkbox 对应的值,若该标签中无内容,则该属性也充当 checkbox 按钮后的介绍。label与数组中的元素值相对应,如果存在指定的值则为选中状态,否则为不选中。
    <template>
      <el-checkbox-group v-model="checkedCities">
        <el-checkbox v-for="city in cities" :label="city" :key="city">{{city}}</el-checkbox>
      </el-checkbox-group>
    </template>
    <script>
      const cityOptions = ['上海', '北京', '广州', '深圳'];
      export default {
        data() {
          return {
            checkedCities: ['上海', '北京'],
            cities: cityOptions
          };
        }
      };
    </script>
    
    3、存在多个值相等的checkbox,要实现各个复选框之间的选中状态相互不影响,可以使用true-label和false-label属性自定义对应的值,属性值可以是字符串也可以是数字。
    <template>
        <el-checkbox :true-label="1" :false-label="0"  v-model="checkList" @change="change">复选框 A</el-checkbox>
        <el-checkbox :checked="checkList1" v-model="checkList1">复选框B </el-checkbox>
        <el-checkbox v-model="checkList2">复选框 C</el-checkbox>
      <el-checkbox :true-label="1" :false-label="0"  v-model="checkList3" @change="change">复选框 D</el-checkbox>
        <el-checkbox :checked="checkList1" v-model="checkList4">复选框E</el-checkbox>
        <el-checkbox v-model="checkList5">复选框 F</el-checkbox>
    </template>
    <script>
      export default {
        data () {
          return {
            checkList: 1,
            checkList1: 1,
            checkList2: 0,
            checkList3: 0,
            checkList4: 1,
            checkList5: 0
          };
        }
      }
    </script>
    
    展开全文
  • Redis设置Key/value的规则定义和注意事项(附工具类) 对于redis的存储key/value键值对,经过多次踩坑之后,我们总结了一套规则;这篇文章主要讲解定义key/value键值对时的定义规则和注意事项。 前面一篇文章...

    Redis设置Key/value的规则定义和注意事项(附工具类)

    对于redis的存储key/value键值对,经过多次踩坑之后,我们总结了一套规则;这篇文章主要讲解定义key/value键值对时的定义规则和注意事项。


    前面一篇文章讲了如何定义Redis的客户端和Dubbo集成存储器;当我们真正开始开发的时候,就会突然发现,有点不知道如何去定义Redis的Key和Value值格式,不要着急,马上我们就可以明白如何去定义和使用,下面我们开始讲解如何定义。

    Spring+Dubbo集成Redis的两种解决方案

    1、redis value 值格式

    在Java常规开发中,我们需要有面向对象的思想,相对于对象来说,比较常用且能快速转换的格式就是 JSON 了;比较常用的Java处理JSON数据有三个比较流行的类库FastJSONGsonJackson,他们的优劣点这里我就不一一介绍了,本文用阿里的FastJSON

    上面提到了JSON,这是因为在Redis的存储中,我们使用它来存储value值,为什么要这样做呢?主要是因为json格式有如下几种好处:

    · 1.标准,主流数据交换格式
    · 2.简单,结构清晰,相对于XML来说更加的轻量级,易于解析
    · 3.语言无关,任何语言都能轻松搞它
    · 4.类型安全,值是有类型的,比如整数、字符串、布尔等
    

    下面我们来看看如何使用json来存储value,代码如下:

    
    /**
     * 在redis数据库中插入 key和value 并且设置过期时间
     *
     * @param key k
     * @param value v
     * @param exp   过期时间 s
     * @return boolean
     */
    @Override
    public boolean set(String key, V value, int exp) {
        Jedis jedis = null;
        // 将 value 转换成 json 对象
        // String jKey = JSON.toJSONString(key);
        String jValue = JSON.toJSONString(value);
        // 操作是否成功
        boolean isSucess = true;
        if (StringUtils.isEmpty(key)) {
            LOG.info("key is empty");
            return false;
        }
        try {
            // 获取客户端对象
            jedis = redisCache.getResource();
            // 执行插入
            jedis.setex(key, exp, jValue);
        } catch (Exception e) {
            LOG.info("client can't connect server");
            isSucess = false;
            if (null != jedis) {
                // 释放jedis对象
                redisCache.brokenResource(jedis);
            }
            return false;
        } finally {
            if (isSucess) {
                // 返还连接池
                redisCache.returnResource(jedis);
            }
        }
        return true;
    }
    

    代码中redis value在存储前我们对其做了一次转换,将对象V转换为json对象后存储;下面我们来看看在redis中value值的格式:

    zhangsan

    上面我们可以看到在redis可视化工具rdm(Redis Desktop Manager)中,key键对应的value用json非常清晰的显示出来了,非常方便我们查阅redis中存储的数据。

    不知道大家注意到没有,上面的代码中有一行我是注释掉了,代码如下:

    // String jKey = JSON.toJSONString(key);
    

    这一行的意思是将key键也json化,不是说json非常友好吗?那为什么要注释这一行呢?下面为大家解释为何要这样做。

    首先,使用json格式的数据都会变成一个josn格式的String字符串,比如 "zhangsan" ,当这个字符串作为key存储时,默认会带有json的特性,那就是双引号 "" 也会带入到redis的key设置中,所以在rdm中我们看到的key值都会默认带上 "" ,这样着实不是非常的美观,特别是对于我们的复杂业务而言,后面会给大家讲如何在rdm中使用key值规则定义业务线文件夹。

    json zhangsan

    2、redis key 键格式

    上面讲了简单的key存储,如 zhangsan 的存储,此时普通的需求可以满足;然而在实际业务中,往往key键的存储会非常的复杂,比如我们现在有一个需求:

    需求:根据基础数据系统中的数据字典类型查询对应的字典集合
    

    这时,我们需要关注的业务就变得复杂了,就不能使用常规的key键存储方式,上面的需求大致可以拆分为:

    1.系统:基础数据系统
    2.模块:数据字典
    3.方法:根据数据字典类型查询
    4.参数:字典类型
    

    为什么要这样拆分呢?为了可读性;也为了抽象出key存储规则;因为业务复杂情况下,我们定义的key键太多时就不便于管理,也不便于查找,以 系统-模块-方法-参数 这样的规则定义,我们可以很清晰的了解redis key存储的值是做了什么事情,而且rdm中也可以以此来分组,后面会讲到。

    下面贴上根据此规则定义抽象出的redis工具类:

    package com.yclimb.mdm.redis;
    
    /**
     * Redis 工具类
     *
     * @author yclimb
     * @date 2018/4/19
     */
    public class RedisUtils {
    
        /**
         * 主数据系统标识
         */
        public static final String KEY_PREFIX = "mdm";
        /**
         * 分割字符,默认[:],使用:可用于rdm分组查看
         */
        private static final String KEY_SPLIT_CHAR = ":";
    
        /**
         * redis的key键规则定义
         * @param module 模块名称
         * @param func 方法名称
         * @param args 参数..
         * @return key
         */
        public static String keyBuilder(String module, String func, String... args) {
            return keyBuilder(null, module, func, args);
        }
    
        /**
         * redis的key键规则定义
         * @param module 模块名称
         * @param func 方法名称
         * @param objStr 对象.toString()
         * @return key
         */
        public static String keyBuilder(String module, String func, String objStr) {
            return keyBuilder(null, module, func, new String[]{objStr});
        }
    
        /**
         * redis的key键规则定义
         * @param prefix 项目前缀
         * @param module 模块名称
         * @param func 方法名称
         * @param objStr 对象.toString()
         * @return key
         */
        public static String keyBuilder(String prefix, String module, String func, String objStr) {
            return keyBuilder(prefix, module, func, new String[]{objStr});
        }
    
        /**
         * redis的key键规则定义
         * @param prefix 项目前缀
         * @param module 模块名称
         * @param func 方法名称
         * @param args 参数..
         * @return key
         */
        public static String keyBuilder(String prefix, String module, String func, String... args) {
            // 项目前缀
            if (prefix == null) {
                prefix = KEY_PREFIX;
            }
            StringBuilder key = new StringBuilder(prefix);
            // KEY_SPLIT_CHAR 为分割字符
            key.append(KEY_SPLIT_CHAR).append(module).append(KEY_SPLIT_CHAR).append(func);
            for (String arg : args) {
                key.append(KEY_SPLIT_CHAR).append(arg);
            }
            return key.toString();
        }
    
        /**
         * redis的key键规则定义
         * @param redisEnum 枚举对象
         * @param objStr 对象.toString()
         * @return key
         */
        public static String keyBuilder(RedisEnum redisEnum, String objStr) {
            return keyBuilder(redisEnum.getKeyPrefix(), redisEnum.getModule(), redisEnum.getFunc(), objStr);
        }
    
    }
    
    

    上面代码中有此文字描述 分割字符,默认[:],使用:可用于rdm分组查看 ;redis key默认使用冒号分割,好处在于可以在rdm中以文件夹的形式分组查看,如图:

    冒号分组

    3、使用枚举类来定义规则

    上面的工具类中的有如下代码,使用了枚举的形式来赋值:

    /**
     * redis的key键规则定义
     * @param redisEnum 枚举对象
     * @param objStr 对象.toString()
     * @return key
     */
    public static String keyBuilder(RedisEnum redisEnum, String objStr) {
        return keyBuilder(redisEnum.getKeyPrefix(), redisEnum.getModule(), redisEnum.getFunc(), objStr);
    }
    

    下面是枚举类代码:

    package com.yclimb.mdm.redis;
    
    /**
     * Redis 枚举类
     *
     * @author yclimb
     * @date 2018/4/19
     */
    public enum RedisEnum {
    
        /**
         * 数据字典Service - 根据字典类型查询字典数据
         */
        MDM_MSTDATADICTIONARYSERVICE_QUERYLISTBYENTITYREDIS(
                RedisUtils.KEY_PREFIX, "MstDataDictionaryService", "queryListByEntityRedis", "数据字典Redis缓存");
    
        /**
         * 系统标识
         */
        private String keyPrefix;
        /**
         * 模块名称
         */
        private String module;
        /**
         * 方法名称
         */
        private String func;
        /**
         * 描述
         */
        private String remark;
    
        RedisEnum(String keyPrefix, String module, String func, String remark) {
            this.keyPrefix = keyPrefix;
            this.module = module;
            this.func = func;
            this.remark = remark;
        }
    
        getter and setter....
    }
    
    

    使用上面的枚举类,可以根据模块和方法定义需要的枚举类型,便于管理和维护,使用起来也非常方便,使用代码如下:

    
    @Override
    public List<MstDataDictionary> queryListByEntityRedis(MstDataDictionary mstDataDictionary) {
    	// redis key 获取
    	String redisKey = RedisUtils.keyBuilder(RedisEnum.MDM_MSTDATADICTIONARYSERVICE_QUERYLISTBYENTITYREDIS, (null == mstDataDictionary ? "" : mstDataDictionary.toString()));
    	// 查询redis缓存
    	List<MstDataDictionary> mstDataDictionaryList = (List<MstDataDictionary>) redisCacheService.get(redisKey);
    	// 如果没有缓存则查询数据库后赋值
    	if (mstDataDictionaryList == null || mstDataDictionaryList.size() <= 0) {
    		mstDataDictionaryList = mstDataDictionaryMapper.queryListByEntity(mstDataDictionary);
    		redisCacheService.set(redisKey, mstDataDictionaryList);
    	}
    	return mstDataDictionaryList;
    }
    

    OK,到这里就差不多讲完了,根据上面所说的分模块方式,自定义redis的key键名称,value值格式使用json来存储;

    对于key键的规则定义也可以使用 Constants 常量类来实现,具体规则看个人爱好和需求。

    结语

    具体的定义规则工具类代码都在上面了,也是源码。

    到此本文就结束了,关注公众号查看更多推送!!!


    关注我的公众号


    展开全文
  • 在Winform自定义控件过程中,经常会碰到给控件提供默认值,往往通过DefaultValue来提供默认值,但有时候却实现不了默认值设置!  DefaultValue属性可以让我们公开属性在设计时、运行时等提供默认值,这个默认

            刚加完班,在公司过夜咯,但总是有一个问题围绕着我,非要做个记录才行,呵呵,本人有点笨,做个备忘总是好的嘛!这也是此博客为什么最近这么重视的,哈哈!言归正传!在Winform自定义控件过程中,经常会碰到给控件提供默认值,往往通过DefaultValue来提供默认值,但有时候却实现不了默认值的设置!

           DefaultValue属性可以让我们的公开属性在设计时、运行时等提供默认值,这个默认值可以让我们在没有额外提供一个值的时候,程序就可以使用默认值了,如下:

           private int  _myproperty;

           [DefaultValue(100)]

           public int myProperty

           {

                   set

                   {

                          _myproperty=value;

                   }        

                  get

                   {

                         return _myproperty;

                   }

           }

            进行过自定义控件开发的人都知道,如上代码应该是有效的!达到属性定义的目的,且能够提供默认值,这个默认值在设计时、运行时均有效,但是,有些特殊的数据类型或开发方式,往往让DefaultValue失效,如要为背景色提供一种默认值,怎么办?如下:

            [DefaultValue(typeof(Color),"Black")]

            public override Color BackColor

            {

                  get

                  {

                       return base.BackColor;

                  }

                 set

                 {

                      base.BackColor=value;

                 }

            }

           兴奋及了,我们可以实现背景的默认值设置了,但,兴奋过头了,默认值设置失效了!

           分析情况为:我们的默认值数据类型复杂(其为Color类型)、属性的定义方式复杂(其为重写方式)等,由此,失效的原因会不会是.net引擎的bug?其实不然,早在.net1.1版本出现的时候,这种情况的出现,MS已经提出,并有意要让工程师解决,由此,这个并不时.net引擎的bug!

           记得几年前见过一篇英文文章特意为DefaultValue设置默认值提供了解决方案,但是,由于时间关系,我就不找这篇文章并翻译了,我的英文也很菜,哈哈!

           我这里提供一种很多人都懂的方式(非如上英文解决方案的)吧,我们在定义自定义控件时,如果要为属性提供默认值,即我们在其构造函数或初始化函数中进行设置就可以了:

           1,构造函数中实现默认值(如实现如上背景默认值):

                  public partial class MyUserControl: UserControl
                  {
                         public MyUserControl()
                         {
                
                               InitializeComponent();
                               base.BackColor = System.Drawing.Color.Black;//重写BackColor的目的是为了为其提供默认值,但,多语言转换中会让重写的“Black”转换失效
                         }

                   }

           2,自定义控件初始化函数实现默认值(如实现如上背景默认值):

                  或把base.BackColor这行代码放到InitializeComponent()中。

           3,等等!



            由于这段时间,团队中有几个新同事均问过这个问题,由此今晚就做个备忘了,说错了望指教!-_-!

            晚安!梦周公去了!

    展开全文
  • 这篇文章主要讲解定义key/value键值对时的定义规则和注意事项。 1、redis value 值格式 在Java常规开发中,我们需要有面向对象的思想,相对于对象来说,比较常用且能快速转换的格式就是 JSON 了;比较常用的Java处理...
  • 这是个奇哉怪也的问题,使用Arcgis Engine中IFeatureBuffer接口 ...会出现错误出现错误:“object”未包含“set_Value的定义。但是使用下面的代码就可以 object value = pAddFeature.get_Value(pF1); p
  • I后台操作: public DataSet getTable(string sql) { try { //创建数据库命令 cmd = new System.Data.SqlClient.SqlCommand(sql, ... 本人刚接触,请问一下,到底怎么样定义,才有value的属性啊?谢谢大家
  • [VBA][Error1004]Sheet.cells.value引起应用程序定义或对象定义错误问题描述 问题描述 将数据处理结果写入到结果Sheet时,最初使用Sheet.cells().value = date,突然弹出 很莫名其妙, 写入前30几条记录时并不会...
  • 问题起因 起因来自于我对于java...我本来想定义这样一个枚举类: public enum MenuOptions { CHAT_ROOM("#1"), MENU("#0"), ERROR("#9999"); private String value; MenuOptions(String value) { thi...
  • 题目:python合并字典,相同key的value如何相加? x = {'apple':1,'banana':2} y = {'banana':10,'pear':11} 解:(如果字典存在不是字符串key,把文中所有f-string直接替换为变量名) ''' 0 题目:...
  • 通过以上两步就可以完成在A模型中,调用B模型Selection型数据列表的Value值。
  • 鼠标放在value上,出现“未对注释类型 Action 定义属性 value” 一般出现这个情况是包导入错误 应该导入以下包 import org.apache.struts2.convention.annotation.Action; 导入后 就OK了...
  • 1 首先创建一个自定义注解: package com.jeecg.yfproject.dao; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; i...
  • p-value&FPR以及q-value&FDR

    万次阅读 2018-01-07 00:12:53
    首先我们来看P-value的定义:在假设检验中,当原假设(H0)为真时,所得到的样本观察结果或更极端结果出现的概率。 如果P-value很小,说明原假设为真时,这个数据甚至更极端的数据出现的概率很小;而当P-val
  • //创建HashMap 集合 泛型为 Person 类 HashMap&... //向集合中添加数据 key为Person对象 value为字符串 hm.put(new Person("顾雨磊",25), "河北"); hm.put(new Pers...
  • 1.map的value默认值 在使用map[]操作符对其进行访问时,...value为自定义数据结构时,如果定义了默认值则初始化为默认值,否则初始化为0 2.自定义map的value默认值 例如: map的value为int类型,key值也为val...
  • var map={  key1:'abc', ...这样定义即可。动态赋值如下: 1 map.key3='12'; 如果key也是动态,则如下处理 1 2 var key='key4'; map
  • spring mvc @Value注解...@Value注解可以将已经加载.properties或者.yml配置文件中属性变量赋值给类中定义的变量。例如: //student.properties student.name=xiaoming student.weight=2000 ...... //Stude...
  • // Map接口和HashMap练习 // 定义一个Map对象,如下 // Map map = new HashMap();...// 将map中键值对打印出来(提示:可以将key集合放到一个set中,定义Iterator遍历器取出set中key, //然后通过ke
  • 今天来记录一下关于meta-data里面数据记录的问题: ...如上,当value的值为数字0开头的时候,我们直接这么写,看着没毛病,但是通过 PackageManager e = context.getPackageManager(); if
  • var key1 = ‘动态key1’; var key2 = ‘动态key2’;... console.log(‘key is ’ + prop +’ and value is’ + map[prop]); } } 原文: https://zhidao.baidu.com/question/1111494250799257659.html
  • @Value的$和#的区别 @Value 有两种注入方式 一个是"${}“另一个是”#{}" “${property:defualt}”:注入的是外部配置文件对应的property里面的默认的属性值,比如server.port,server.path这些 “#{obj.property:...
  • @Value("${author.name}") private String name ; @Value("${author.sex}") private String sex; @Value("${author.birthday}") private String birthday; @RequestMapping("/index") public String ...
  • C#定义属性及其关键字get,set,value

    千次阅读 2013-06-28 21:34:27
    属性拥有两个类似于函数块,一个块用于获取属性值,另一个用于设置属性值。这两个块也称为访问器,分别用get和set关键字来定义。可以忽略get块创建只写属性,忽略set创建只读属性。 public int MyIntProp ...
  • dbms_random.value生成随机数

    千次阅读 2016-08-11 01:09:11
    使用dbms_random.value生成随机数:在oracle官方文档中,关于dbms_random.value的定义如下:VALUE FunctionsThe basic function gets a random number, greater than or equal to 0 and less than 1, with 38 digits ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,730
精华内容 12,692
关键字:

value的定义