Coding style 如果在函数中使用语句,最好的方法是什么

如果我有一个包含大量条件的函数,那么组织它的最佳方法是什么 我担心的是其他人进入代码并理解正在发生的事情。尽管示例很简单,但请想象条件是非常复杂的 例如: public void function(string value, string value2) { if (value == null) return; if (value2 == value) DoSomething(); } 或 或 我更喜欢第一种选择——更清晰,更容易阅读和理解 我

Coding style 在源文件中强制使用固定文本宽度

在源代码文件中,应该严格遵守固定的文本宽度吗?更具体地说,您是否始终遵守80个字符的代码限制和100或120个字符的注释限制?有时,在我的代码中有一些行,我不太愿意引入换行符,因为它会破坏统一性或降低周围代码的易读性。在这些情况下,您是自行决定,还是始终选择遵守文本宽度?这取决于您为什么寻求强制执行限制 代码是您自己的,还是与许多其他人共享?您是否正在创建一个源代码,该源代码将被另一个人、十几个人或数百个人查看和扩充?使用/查看的人越多,一致性越好 当然,你也为不限制 有时我的代码中有行 在这篇

Coding style 是否有C/C+的代码格式化程序+/Objective-C也可以固定曲括号?

我发现的大多数代码格式化程序都有句柄缩进和一些额外的间距,但很少 修复位于新行上的花括号。有人知道这些不同风格的花括号是如何命名的吗 另外,是否有一个在线代码格式化程序 目前,我正在使用自己的快速脏Python脚本。一个不错的脚本。它可以通过C、C++、C、java来实现,也可以通过命令行来格式化代码,或者可以在格式化程序中使用(如果你想创建一个)。它看起来像ObjuleC,除了C、C++、C、D、java和PaW. 至于具体的花括号样式,有一个很好的总结,其中大部分。例如,有K&R、BSD/A

Coding style 如何构造大型OpenCL内核?

我曾在几个项目上与OpenCL合作,但总是将内核作为一个函数(有时相当大)编写。现在我正在做一个更复杂的项目,我想在几个内核之间共享函数 但我能找到的示例都将内核显示为单个文件(很少有人甚至调用辅助函数)。似乎应该可以使用多个文件-clCreateProgramWithSource()接受多个字符串(我假设它们是组合的)-尽管pyopencl的Program()只接受一个源 因此,我希望听到任何有这方面经验的人: 是否存在与多个源文件相关的任何问题 对于pyopencl来说,简单地连接文件是最

Coding style 迭代比线性码慢吗?哪一个更好?

在过去的几天里,我有一个疑问,在用ruby编写代码时,线性代码是否比迭代更快更可取 让我举个例子。相同功能的代码块以两种不同的方式编写: 方式1: ['dog', 'cat', 'tiger'].each do |pet_name| puts "I have many pets, one of them is #{pet_name}." end 方式2: puts "I have many pets, one of them is dog." puts "I have many pets,

Coding style 声纳编码规则修改

我有个问题 我需要修改java“if/else/for/while/do语句应始终使用大括号”“将规则编码到声纳质量配置文件中 if/else/for/while/do语句应始终使用大括号 在某些情况下,使用大括号可能容易出错。例如在 下面的示例中,这两个语句似乎附加到 if语句,而这仅适用于第一个语句: if (condition) // Non-Compliant executeSomething(); checkSomething(); if (condition) { //

Coding style 返回具体数据类型还是抽象数据类型? 我在阅读代码完整的过程中,在书的末尾,在有关重构的章节中,作者列出了一系列在重构时应该提高代码质量的事情。

他的观点之一是总是尽可能返回特定类型的数据,尤其是在返回集合、迭代器等时。因此,据我所知,如果在方法中使用该数据类型,则应该返回HashSet,而不是返回,比如说,集合 这让我很困惑,因为听起来他在鼓励人们打破信息隐藏的规则。现在,当谈到访问器时,我理解了这一点,这是一个明确的例子。但是,当计算和处理数据时,并且该方法的抽象级别并不意味着直接的数据结构,我发现最好返回尽可能抽象的数据类型,只要数据不分离(例如,我不会返回Object,而不是Iterable) 所以,我的问题是:Code Comp

Coding style 帕斯卡壳边壳

帕斯卡案例:它是“不可征税”还是“不可征税”“不可征税”“将是最佳选择,因为它是一个单词 或者,您可以使用“不纳税” 不可征税对我来说没什么意义。这是不可征税的。这只是一个普通的词。Non(在英语中)不是一个词。这只是一个前缀。同样,前缀un-和re-本身不是单词,所以当你把它们放在标识符前面时,你不会把其余的大写。例如:设置、复位;做,撤消 除此之外,我必须阻止使用否定的标识符。听起来这是一个布尔值,这只会导致双负表达式,如下所示: if not Nontaxable then ... 不

Coding style 修改其他程序员的最佳方式';s导航

“更改导航中的项目?我当然可以在15分钟内完成。” 因此,我试图更新我继承的一个站点上的导航,结果发现之前的程序员是一名大学生,并将此站点用作某种项目。不用说,这里没有注释,代码一个接一个地调用函数,我就是不能遵循逻辑 我正在寻找一种迂回的方式来更新导航。我尝试使用Dreamweaver搜索站点中的所有文件,并查找包含页面名称或url的任何文件(希望找到某种包含的文件)。没有。我创建了控制主导航的文本文件,但没有用于子导航的文本文件 没有数据库 如果有帮助,这里是网站 如果您想查看被解析为创建主

Coding style 是否有用于代码优化的众包网站?

我喜欢干净、写得好的代码,但我没有经验或知识(目前)来最好地编写代码;所以,我想知道是否有一个网站(像这样),人们可以在那里提交代码片段、分类、实现等,供其他有经验的人审查和改进,这样每个人都可以从他们的修改或建议中学习 我知道stack overflow很像这样,但我认为它不是为这个目的而设计的。谢谢。就是其中之一。代码审查在SO中是完全可以接受的,只要它不是太笼统(即,这里有20个类,请审查)是的,我知道,但有时这里的用户认为它是家庭作业。

Coding style 在类代码中按什么顺序放置方法?

类可以有静态的、私有的、受保护的、公共的方法。每种方法都有修改、添加、删除等功能 如何在类的代码中对函数进行分组,使其易于阅读?最佳实践是什么 谢谢。这是我为Java类所做的: 建设者 实施的公共方法 接口 已重写公共方法或从中声明为抽象的方法 扩展类(非对象,请参见 (见下文) 公共方法(不包括 getter/setter/Object方法) 接受者和接受者,按照 属性已声明 equals、hashCode和toString 私有方法 公共静态方法 一个约定不一定适合所有场景——通常,在我们的

Coding style 为什么函数只有一个出口点?

我一直听说单出口点函数是一种糟糕的编码方式,因为它会失去可读性和效率。我从未听过有人与另一方争论过 我原以为这与CS有关,但这个问题在cstheory stackexchange上被否决了。有不同的思想流派,很大程度上取决于个人偏好 一个是,如果只有一个出口点,那么就不那么令人困惑了——通过该方法的只有一条路径,并且知道在哪里寻找出口。如果使用缩进表示嵌套,则代码会大量向右缩进,并且很难遵循所有嵌套范围 另一个是,您可以检查先决条件并在方法开始时提前退出,这样您就可以在方法体中知道某些条件为真,

Coding style “a”是什么;声明性格式";?

说: 使用声明性格式进行设置自动化,以最大限度地减少新开发人员加入项目的时间和成本 “声明性格式”是什么意思?声明性格式是一种声明程序意图/最终结果的格式,而不是声明程序应该如何实现的格式。声明性代码通常由调用高级函数或抽象的语句组成,这些语句具有明确的人类可读意图。相反,命令式代码是由语句组成的,这些语句清楚地传递它们对程序状态的影响,而不涉及任何高级目标 更简洁地说,声明性代码传达了为什么,而命令性传达了如何 下面的代码是一个假设程序的Makefile。该程序使用make提供的抽象来定义构建

Coding style 语言不可知风格检查器?

有语言不可知的风格检查器吗 我正在使用一些专有语言,我想强制执行一些通用代码准则以实现持续集成。例如: 文件包含与特定模式匹配的标头 在选项卡上使用空格 缩进应该是2个空格 文件长度应小于5000行 文件名应遵循特定的模式 我不知道有哪种工具专门处理与语言无关的检查。你可以在不懂语言的情况下检查的东西是有限的 但是:Checkstyle有少量与语言无关的检查,这些检查都源自: AbstractHeaderCheck(!) 文件长度检查(!) FileTabCharacterCheck(!)

Coding style 使用return语句效果非常好!

当我创建带有返回值的方法时,我通常会尝试并设置一些东西,这样就不会出现调用方法时必须返回一些默认值的情况。当我开始的时候,我经常编写一些方法来做一些事情,或者返回它们所做的事情,或者,如果它们没有做任何事情,则返回null。但是我讨厌在我的代码中有丑陋的if(!null)语句 我正在读一本关于ruby的重新指南,这本指南是我在很多月前读过的,由务实的程序员编写的,我注意到他们通常会返回self(ruby的this),而他们通常不会返回任何东西。他们说,这是为了能够链接方法调用,例如在本例中,使用

Coding style 在嵌套方法中执行参数验证的位置

鉴于以下场景/代码,执行验证的适当位置在哪里: 仅在MethodA中:因为这是要由外部程序集使用的公共方法? 在MethodA和B中,因为它们都可以在类外访问? 或者方法A、B和C,因为方法C可能被另一个内部方法使用(但可能没有效率,因为程序员已经可以看到方法C的代码,因此应该能够知道要传递的有效参数) 谢谢你的意见 public class A { public void MethodA(param) { MethodB(param);

Coding style 如何重构快速发展的代码?

我有一些研究代码是真正的老鼠窝,到处都有代码重复,显然需要重构。然而,随着我在主题上提出新的变体并将其融入到代码库中,代码库正在不断发展。我之所以推迟重构这么长时间,是因为我觉得在我花几天时间构思出好的抽象概念,看看什么样的设计模式适合什么地方,等等的那一刻,我想尝试一些新的不可预见的想法,使我的抽象概念完全不足。换句话说,由于代码的发展速度,我真的不知道抽象线属于何处,即使不缺少(近似的)重复,而且代码的总体混乱使添加内容成为一种真正的痛苦。应对这种情况的最佳做法有哪些?不要花太长时间重构 当

Coding style 返回计算结果和状态。最佳做法

我在考虑允许我返回计算结果和状态的模式: 我可以考虑的方法很少: 函数返回计算结果,状态通过out参数返回(并非所有语言都支持out参数,这似乎是错误的,因为通常您不希望修改参数) 函数返回由两个值组成的对象/对(缺点是,您必须创建人工类才能返回函数结果,或者使用没有语义意义的对-您知道哪个参数是哪个参数,按照它的顺序) 如果您的状态是success/failure,则可以返回计算值,并在出现错误时抛出异常(看起来是最好的方法,但仅适用于成功/失败场景,不应滥用它来控制正常的程序流) 函数返回

Coding style IntelliJ IDEA闭包缩进设置

IC中是否有闭合缩进设置 我想要这个(默认想法方式) 如下所示(默认Eclipse方式) 这是Clojure插件的一个已知错误。请随意观看/投票。这是Clojure插件的一个已知错误。请随意启动/投票。此行为可以用插件覆盖此行为可以用插件覆盖看起来像。我自己还没有在他们的跟踪器上发现问题。谢谢顺便说一句,我接受这个答案。看起来。我自己还没有在他们的追踪器上发现这个问题。谢谢顺便说一句,我接受这个答案。 deleteButton.setOnClickListener(new

Coding style 为什么let优先在方案中定义?

我总是这样写我的计划程序(并且看到它们被编写): (define (foo x) (let ((a ...)) ((b ...)) ...)) 我的一个学生写道: (define (foo x) (define a ...) (define b ...) ...) 两者的结果相同。我理解行为上的差异:第一个创建一个指向过程应用程序框架的新框架,而后者直接修改过程应用程序框架。后者将产生稍好的性能 另一个区别是前者避免在过程体中的指令序列之前使用隐式的be

Coding style 通用Lisp对象设置器函数样式

我正在尝试编写一个函数,该函数使用名为节点的用户定义对象列表来生成它们之间的连接。每个节点对象都有一个用于其唯一编号(“num”)的插槽和一个用作节点之间的边(“边”)的编号列表的插槽+max-edges+是一个整数,定义尝试边缘配对的次数,+max-rooms+是节点列表中传递到函数中的节点数(始终

Coding style 与不遵循团队定义标准的队友合作的想法?

在团队环境中工作,您如何处理拒绝遵循团队定义标准的开发人员 开发人员处于初级阶段 开发人员处于对等级别 开发人员处于高级级别 我知道这是主观的,但我觉得这会使开发人员更加专业,从而使他们受益。如果有标准文档,那么只需指向文档并告诉他们需要遵守标准即可。如果没有现成的文件,而且是某种特殊的“这是团队实际编码的方式”,那么组织一次会议,就团队标准应该是什么达成共识,并创建一个标准文件。我认为,为了可读性和维护性而需要一致的风格是相当困难的,当有规则说“这样做”时,要偏离它比仅仅是既定的实践要困

Coding style 我如何执行编码标准?

我想写一个脚本来对我的团队的代码实施一些规则 例如,在我们的代码标准中,所有成员变量和私有函数都应以下划线开头: class A{ private: int _count; float _amount; void _increment_count(){ ++_count; } } 因此,如果变量声明如下,我想为这个类抛出一些警告、错误或某种消息 class A{ private: int count; float amount; void inc

Coding style 使用2-空间缩进与4-空间缩进是否有实际或技术优势?

除了口味、习惯和个人喜好之外,编码时使用2-空格缩进和4-空格缩进有什么优势吗 例如,在本例中,建议CSS使用两个空格的缩进 在不同系统之间传输数据时,使用其中一种方法是否有技术优势 有被广泛接受的惯例吗?(不同语言之间可能存在差异)在这方面没有明显的“技术”优势。事实上,我能想到的唯一“技术”问题是对源文件中字节数的影响 如果使用空格字符(ASCII SP)表示缩进,则2个空格比4个空格少2个字符 如果允许使用制表符,则(在Windows上)制表符最多缩进4个空格,因此制表符会减少字符数。但

Coding style 如果语句格式设置是最佳做法,那么';你的风格是什么?

希望改进我的IF语句,我想让我的代码看起来漂亮 这就是我目前正在做的,可读性好吗,还有改进的余地吗 我没有人可以四处打听。这就是我来这里的原因。请不要结束我的问题:(您的冗长导致代码可读性较差,我认为以下格式是最好的: if ( null == o || null == o.ID || null.Title || 0 == o.ID.Length || 0 == o.Title.Length ) { // do stuff } 我们都有高分辨率/宽屏显示是有原因的,没有理由用非常短的语法来

Coding style Google Chrome扩展风格的弹出窗口,而不仅仅是弹出窗口的内容?

是否有可能设计一个google chrome扩展弹出窗口,而不仅仅是它的内容。我指的是指向图标的箭头,以及边框、背景等。对不起,这些元素是不可自定义的 抱歉,这些元素不可自定义 弹出页面是HTML文件,所以是的,它们可以用CSS设置样式。如果这就是你要问的…?你可以使用“options\u ui”:{“page”:“html/popup.html”,“chrome\u style”:true},但是你的弹出窗口与选项页面相同。弹出页面是html文件,所以是的,它们可以用CSS设置样式。如果这就是

Coding style 什么时候违反单一责任原则是合理的?

在重构了java web应用程序中的一些服务层类之后,我问自己,在哪一点上停止遵守单一责任原则(SRP)并保持代码的可维护性和可读性是合理的。现在我想问你在这个问题上的经验 示例: 假设UserManager类执行以下操作: 从数据库中查找用户 创建新用户 操纵现有用户 案例A:这三项职责中的每一项都由执行其任务的几种方法组成 → 对我来说,把它分成三类是很清楚的 案例B:这三项职责中的每一项都只包含一种方法 → 在这种情况下,您有什么建议?应该将其分为三个小类还是留在UserManager类中

Coding style 代码报告/跟踪工具

我想知道您是否知道任何有助于跟踪“”的工具。这样团队成员就可以报告代码中的一些发现,然后可能就最有问题的问题进行投票(就未来的项目开发而言) 有什么经验吗?你看过或看过吗?这两个都很好 我也会推荐。通过这些,您可以分析常见的问题,例如未设置最终方法参数 最后,我建议使用,因为这将按优先级顺序突出显示所有代码错误。例如,通过NPE有意编写的代码,它将向您强调这一点,并可以与Jenkins集成 所有这些结合在一起可以真正帮助您朝着“干净代码”的方向前进。这些工具似乎专注于自动检测代码气味。而我感兴趣

Coding style 一旦你学会了基础知识,你如何开始编写真正的项目并将不同的语言添加到一起?

因此,我掌握了一些基本语法,包括php、jquery和mysql等等。我想开始开发我的代码,我已经阅读了一些关于如何开始编写自己的代码的内容,其中考虑了最佳实践,这些是: 在编码之前写一个常见问题 创建网站所有不同部分的思维导图,以及它们如何与用户的特定角色(即管理员、访问者、注册用户等)相关联 问题: 1) 我想知道当冒险开始编写一个项目时,什么是最好的开始方式?(当我读到一些开发人员建议您从头开始,而另一些人建议采用其他人的代码和框架以取得领先时,我得到的信息喜忧参半。)您对此有何看法

Coding style 关于变量/函数命名约定的思考

我一辈子都在断断续续地写代码。我主要是编码Perl,但也有一些java、PHP、C++、C++。我甚至尝试过Emacs Lisp,并且偶尔编写了shell脚本。然而,我从来没有真正接触过这门学科来获得任何专业知识——其他事情对我来说有着更高的优先级。我不认为自己真的精通任何语言,但Perl,现在也是Haskell,我现在正在学习一门课程。 最近,我一直在思考我的编码风格。不是实际代码的样式;作为一名CS学生,我只为娱乐或学校做项目,这使我几乎总是能写出我认为漂亮的代码。有一个问题特别困扰着我。这

Coding style 不使用索引变量就可以做N次的Python方式?

每天我都越来越喜欢蟒蛇 今天,我写了一些代码,比如: for i in xrange(N): do_something() 我不得不做了N次。但每次都不依赖于i(索引变量)的值。 我意识到我是在创建一个从未使用过的变量(I),我想“肯定有一种更具python风格的方法可以做到这一点,而不需要那个无用的索引变量。” 所以。。。问题是:你知道如何以一种更(pythonic)优美的方式完成这个简单的任务吗?比在xrange(N)上循环稍微快一点的方法是: import itertools

Coding style Fortran未格式化输出的文件名约定

尽管任何文件名都是有效的,且无格式输出在可移植性方面有限制,但我仍想问,是否有一种文件名约定(如添加后缀)经常/通常用于无格式Fortran输出?High Performance Mark的评论回答了我的问题: YOUR_FILE.dat 不,没有,做一个适合你当地需求的,然后继续做一些更有趣的问题。如果您对此评论不满意,请将第一句替换为“是”,使用.dat。我的约定(基于我通常输出的内容)是.raw,用于输出大端32位浮点。对于2D数组,例如前导尺寸为128的数组,我将其后缀为_LD128,

Coding style 编程风格:对状态代码使用常量?

在状态代码中使用常量是否是一种好的做法,例如在将AJAX函数的结果返回给调用者时?例如: CONST STATUS_INVALID_ENTRY = 1; CONST STATUS_ENTRY_OK = 2; $.getJSON("addRecord.php", $("#addRecord").serialize(), function (result) { switch (result.status) { case STATUS_INVALID_ENTRY:

Coding style 加入“一个”是否更有效;“检查位置”;在a";移动功能“;对于一个游戏,还是作为外部功能的外部? 我在C++中创建一个游戏(说到哪个,我使用的代码是什么?),这可以被简单地描述为棋盘游戏,我想知道这两个“检查字符是否越界”的功能是什么更有效:< /P>

一: 两个 基本上,第一种方法移动每个实体,然后检查所有实体的位置并相应地重置它们,第二种方法确保玩家移动时不会将其移出边界,而不是等待循环结束 我想知道这两个(系统?)中哪一个比另一个更有效或更快,或者,如果它们都相同,哪一个是更好的编码风格?后者更快(不执行和撤消)。我也会认为它更干净,但这是一个意见问题。我会在移动它之前确保任何移动都是合法的。这样,你就可以保持一种理智的状态,而不是尝试某件事,让“董事会”处于无效状态。它在面向对象的方式中也更有意义。物体不能做出无效的移动,因此移动是可信

Coding style 编码风格主要是为了可读性还是其他因素?

我记得在Douglas Crockford的《Javascript好的部分》一书中读到,由于自动插入分号,无块语句可能会出错 if (condition) foo = true; vs 在第二个示例中,它将始终如一地工作,在第一个示例中,解释器将自动插入分号,并可能导致代码中的歧义。正如Douglas指出的,这可能是不好的,并且很难调试,我同意这一点。但它让我思考,是否有一些例子表明编码“风格”实际上具有语法含义?换言之,未能遵循某个缩进或明显样式的示例实际上会导致错误或错误。我假设Py

Coding style if的样式:嵌套还是不嵌套

我的一位同事和我讨论了以下最佳实践问题。 大多数函数/方法都是从一些参数检查开始的 我提倡以下风格,避免嵌套 if (parameter one is ugly) return ERROR; if (parameter two is nonsense || it is raining) return ERROR; // do the useful stuff return result; 他来自一个更具功能/逻辑编程背景的人,更喜欢以下内容,因为这样可以减少函数的退出点的数量 if (para

Coding style fakeetisy回调实现

如何翻译此moq代码: 变成假货?我想你必须这样做: A.CallTo(() => foo.SayHello("name")).Returns("hello"); 顺便说一句:你为什么要使用Fakeetisy,在我看来,它不如它强大?我认为你必须这样做: A.CallTo(() => foo.SayHello("name")).Returns("hello"); 顺便说一句:你为什么要使用Fakeetisy,在我看来它不如它强大?试试这个: A.CallTo(() => f

Coding style Emacs lisp命名空间和内部函数约定

在emacs中,标记包名称空间的典型方法是选择 一种(优选较短的)前缀,应用于与数据相关的所有符号 包裹以表明功能被视为“内部” 仅限使用”,不应直接在包装外使用 最常见的转换似乎是前缀--functionname和,或when 一个函数需要一个非常简单的子函数,例如。 前缀-functionname-1 然而,我也经常需要一些“子包”,例如,当一个包 由我已拆分为的几个公共功能组成 不重叠的子功能。是否更喜欢有惯例吗 mypkg-list-all mypkg-list-all--filter-

Coding style 代码样式:在底部概括不同的子句?

我有一个长if的for循环。。。否则,如果链在里面,每个案例里面都有一个子句。其中一些子句可能非常长,但有一些代码存在于其他子句中。我是否应该将代码中的代码放在与其他子句做相同事情的其他子句中,并将它们放在if。。。否则,如果chain和put在不使用此代码的子句中继续,或者我应该离开它吗 比如说, for { if (...) { // clause1: has some code that matches clause2, and others but not all

Coding style 这个Clojure代码缩进是否正确?

我把代码以两种不同的方式缩进。我在这里感到困惑,因为我不知道当一个函数有多个参数时该怎么办。每个参数应该位于不同的行还是相同的行?此外,当我们有像(def xyz(fn abc[a1 a2])这样的东西时,(fn abc…)会进入另一行吗 我正在阅读以下内容,但对我来说似乎没有多大意义。 **压痕和对准 任何窗体的运算符,即打开后的第一个子窗体 圆括号,用于确定缩进或对齐 剩余形式。此位置的许多名称表示特殊 对齐或缩进规则;这些规则是特殊运算符、宏或 具有特定参数结构的过程 但是,如果第一个子窗

Coding style 在Go中调用os.Open(<;filename>;)时,如何检查错误?

我是新手(到目前为止花了30分钟!),正在尝试进行文件I/O file, ok := os.Open("../../sample.txt") if ok != nil { // error handling code here os.Exit(1) } ... 当呼叫失败时,它不应该返回一个错误号码吗?此调用返回os.Error,并且除了“String()”之外没有其他方法 这是检查Go中错误的推荐方法吗 是的,这是Go(多值返回)的正常方式,Go的制造商对异

Coding style 用于检查IDE/编辑器语法突出显示的“通用”源代码示例/代码段(使用不同的编程语言)

互联网上是否有这样的通用示例源代码编译(使用不同的编程语言),用于检查IDE/编辑器中代码的语法突出显示是否工作良好 源代码示例,它使用每种可用语言的关键字和语句来检查语法突出显示是否工作良好 它应该看起来像测试页面。但是,在少数几个例子中,语言语法并没有得到充分利用,无法向用户充分展示其潜力。我找到了主题,但它已经快3年了,仍然没有答案。。

  1    2   3   4   5   6  ... 下一页 最后一页 共 10 页