- Python 项目完整结构示例
慧一居士
Pythonpython
以下是一个典型的Python项目完整结构示例,适用于中等规模的应用程序或库。该结构遵循最佳实践,具有良好的模块化、可维护性和扩展性。项目结构示例my_project/├──src/#源代码目录│├──__init__.py#标记为Python包│├──main.py#主程序入口(可选)│├──core/#核心功能模块││├──__init__.py││├──app.py││└──utils.py│
- 通用 Makefile 模板
想和我重名?
小Tips开发语言linux
一个简单的Makefile模版#=============================================================================#示例项目结构:#my_project/#├──Makefile#├──src/#│├──main.c#│└──module1.cpp#└──include/#├──my_header.h#└──module1.h
- cmake:cmakelist常用内容模板
十秒耿直拆包选手
CandC++c++cmakelist
cmake_minimum_required(VERSION3.26)project(my_project)set(WITH_TEST_MAINON)#是否使用debug模式set(USE_OPENCVOFF)#不使用opencv模块set(CMAKE_CXX_STANDARD17)#指定编译使用的C++标准set(CMAKE_VERBOSE_MAKEFILEon)#是否显示所有执行的完整编译和链
- CMake 从 GitHub 下载第三方库并使用
程序员乐逍遥
CMake高级技巧githubcmakec++
有时我们希望直接使用GitHub上的开源库,而不想手动下载、编译和安装。可以利用CMake提供的FetchContent模块来实现自动下载、构建和链接第三方库。FetchContent命令官方文档✅示例代码我们将以fmt这个流行的格式化库为例,演示如何:使用FetchContent从GitHub获取源码。构建该库。在主程序中使用它。️步骤详解1.创建项目结构my_project/├──CMakeL
- GO Mod使用教程
jiuweiC
go
GOMod使用教程一、管理依赖1.初始化项目my_projectcdmy_projectgomodinitmy_project即会在my_project目录下生成go.mod注意文件内的内容将会由my_project为根目录gobuild则会自动查找文件依赖并下载2.下载依赖gomoddownload下载依赖并在my_project下生成go.lock二、ide支持目前介绍goland1.在pre
- python中如何组织项目工程文件
晓风残月淡
python爬虫python开发语言项目工程文件
一、项目工程文件目录一个典型的Python项目工程目录结构可以帮助你更好地组织代码、资源和测试,从而使得项目更加清晰和易于维护。my_project/│├──my_project/#项目的主代码包│├──__init__.py#包初始化文件│├──module_1.py#示例模块1│└──module_2.py#示例模块2│├──tests/#测试代码目录│├──__init__.py#测试包初始
- Python:项目相对路径
一头大学牲
程序--编程记录python
项目层级结构:my_project/├──main.py├──module1/│├──__init__.py│└──my_module.py├──module2/│├──__init__.py│└──another_module.py1.包结构和__init__.py文件:Python将包含__init__.py文件的目录视为包,这允许文件夹内部的模块互相导入。无论包或模块位于项目结构的哪个级别,
- Bazel项目目录结构
code-ranger
CPPc++bazel
Bazel是由Google开发的一款高效的构建和测试工具,广泛应用于大型项目中。Bazel使用一套特定的文件结构和配置文件来描述项目的构建过程。以下是Bazel常见的文件结构及各个文件的详细作用介绍:1.项目根目录结构一个典型的Bazel项目根目录结构可能如下所示:my_project/├──WORKSPACE├──.bazelrc├──BUILD├──src/│├──BUILD│├──main/
- Python:使用PyInstaller打包
Faylynn
Pythonpython
本文所讲仅为独立的项目文件夹下如何进行打包,不涉及存在依赖关系的多个文件夹共同打包。项目结构示例D:/└──myproject└──my_project├──main.py├──module1.py└──other_files...项目文件夹:my_project主程序文件:main.py其他自定义模块:如module1.py、module2.py…其他资源文件(如图片、配置文件等):放在imag
- 如何使用 Pytest 进行测试
Itmastergo
pytest
Pytest是一个强大的Python测试框架,支持简单单元测试和复杂的功能测试。它具有灵活的断言表达式、支持参数化测试、强大的插件生态系统等特点。二、环境搭建1、安装Pytest:pipinstallpytest安装完成后,可以通过命令行检查是否安装成功:pytest--version2、项目结构:一般来说,项目的测试文件和代码文件可以按照以下结构组织:my_project/├──src/│└──
- 从零开始实现一个简单的 Git 操作实例
LQS2020
git
本文通过创建一个简化版的版本控制系统,展示Git的核心操作,如初始化仓库、提交更改、查看历史记录等。为了更好地理解这些操作,我们会结合图示来说明。1.初始化仓库在Git中,初始化仓库的命令是gitinit。这个命令会在当前目录创建一个新的Git仓库,生成一个.git目录来跟踪文件的版本历史。图示:/my_project├──.git/#隐藏的Git仓库目录├──file1.txt#项目文件└──f
- 展示wandb的数据
irrationality
计算机应用技术python开发语言
importwandbimportmatplotlib.pyplotasplt#初始化wandbAPIapi=wandb.Api()#假设您想要访问的项目名为'my_project',并且您的wandb用户名为'my_username'project_name="aicolab/RWKV-5-Test"#获取项目中的runsruns=api.runs(project_name)#假设您只关心第一个
- 【VSCode,Python】一劳永逸的成功导入本地模组,PYTHONPATH的修改,与各种踩坑点
溢流眼泪
【科研】vscodepython
【VSCode,Python】一劳永逸的成功导入本地模组,PYTHONPATH的修改起因查阅发现做法一(推荐做)做法二(推荐必做)踩坑点(必看)起因文件目录如下:my_project/|--package1/||--module1.py|--package2/||--module2.py|--main.py我想在model2.py中导入model1.py但是有如下要求:直接在代码里写上sys.pa
- python导入同级目录下不同py文件中的类报错
怎么全是重名
pythonaierror(vs)python开发语言
问题目录结构如下my_project/a.pyclassAb.py在b中:fromaimportA报错Nomodulenamed‘a’部分解答是没有init.py文件,那么该目录将不会被视为Python的包更改为from.aimportA但本项目中仍然报错找不到相应父包解决创建__init__.py空文件from.aimportA即可
- 如何将自己的项目上传到github上,并进行项目管理
稻壳特筑
Ubuntu科研习惯养成github
将项目上传到GitHub并进行项目管理是一个多步骤的过程。以下是一个简单的示例,指导您如何完成这一过程:1.创建GitHub账户如果您还没有GitHub账户,请先在GitHub上注册一个。2.创建新仓库登录您的GitHub账户。在GitHub主页的右上角,点击"+"图标,然后选择"Newrepository"。填写仓库名称(例如my_project)。选择是否将仓库设为公开(任何人都可见)或私有(
- gdb | gdb调试的一些注意事项
极智视界
踩坑记录gdb调试C++注意事项
在编译的时候最好添加-g编译选项,以便生成带有编译信息的可执行程序,以便在调试时更加轻松地跟踪调试代码。g++-gmain.cpp-omain如果是cmakelist,可以是下面这样的:cmake_minimum_required(VERSION3.0)project(my_project)set(CMAKE_CXX_STANDARD11)set(CMAKE_CXX_STANDARD_REQUIR
- 机器学习 项目结构
圈圈圈小明
深度学习人工智能
需求:我的项目文件夹下有许多文件,我想把我的项目单独放到一个文件夹,我的封装的模块放到一个一个文件夹方便管理,我该怎么做,这样做之后,主程序调用子模块需要在接口函数中调整路径吧。解决:将项目单独放到一个文件夹并将封装的模块放到另一个文件夹是一种很好的组织方式,可以提高代码的可维护性。以下是一些建议:项目结构建议:my_project/├──data_processing/│ ├──__init__
- docker篇---docker-compose和dockerfile构建镜像
心惠天意
dockerlinuxbash
docker-compose和dockerfile构建镜像docker-compose该docker-compose将主项目与mongo和nvidia这两个镜像联系在一起,作为依赖version:'3.8'services:my_project:build:projectcontainer_name:"object-detection"volumes:-/home/aaa/project_obje
- Rust Module 系统讲地明明白白的
大怀特
langrust
文章目录例1例2例3superuse扩展模块总结Rust模块系统非常让人困惑,并且使新手有非常大的失败感.在本文中,我会用实际例子来解释模块系统,你会清楚明白它是怎样工作的,并且可以立即应用到你们的项目中.由于Rust模块系统十分独特,我请大家读本文时需要打开思维,不要往其它语言上套.用以下结构来模拟真实项目:my_project├──Cargo.toml└─┬src├──main.rs├──co
- 发现 Cargo 的魅力:优雅地构建、发布和管理 Rust 项目
Walter Sun
1024程序员节
文章首发地址Cargo是Rust的官方包管理器和构建工具。它被用于构建、测试和发布Rust项目,同时也管理项目的依赖关系。以下是一些关于Cargo的详细解释:初始化项目:使用cargonew命令可以在指定目录创建一个新的Rust项目。例如,cargonewmy_project将创建一个名为“my_project”的新项目。项目结构:Cargo会为项目创建一个包含src目录和Cargo.toml文件
- Error: Cannot find module ‘webpack/lib/RuleSet‘
Taylor_wk
webpack前端node.js
ERRORError:Cannotfindmodule'webpack/lib/RuleSet'Requirestack:-E:\My_project\Project\Ruo_YI\mps-ui\node_modules\vue-loader\lib\plugin-webpack4.js-E:\My_project\Project\Ruo_YI\mps-ui\node_modules\vue-lo
- 【GIT版本控制】--初始化仓库
喵叔哟
GIT版本控制git
一、创建新仓库在GIT中,要创建一个新的仓库,你可以使用以下步骤进行初始化:打开终端或命令提示符:首先,打开你的终端或命令提示符窗口。这是将在其中执行GIT命令的地方。导航到项目目录:在终端中,使用cd命令导航到你希望创建新仓库的项目目录。例如,如果你的项目位于你的用户文件夹下的"my_project"文件夹中,可以执行以下命令:cd~/my_project初始化新仓库:一旦你在正确的项目目录中,
- rasa快速搭建对话系统
nemo2011
machinelearningnlpNLU
1.安装Rasarasa--version2.创建一个Rasa项目:可以使用以下命令在当前目录下创建一个名为my_project的Rasa项目。rasainit--no-prompt--projectmy_project3.编写NLU训练数据:在my_project目录下创建一个名为data的文件夹,并在其中创建一个名为nlu.md的文件。在nlu.md中,可以编写自然语言理解训练数据,例如:##
- Python3 Requests库 get请求 报错 requests.exceptions.TooManyRedirects: Exceeded 30 redirects.
咸鱼功阀术
一开始使用requests.get(url)就开始报错,后面查了下资料,说需要在后面加上allow_redirects=False。可惜当加上这个条件的时候,直接返回304,获取不了实际内容。还有的资料显示是因为没有hearders的问题,后面设置上去了也是不行。Traceback(mostrecentcalllast):File"E:/my_project/project/测试/简单分布式爬虫(
- 海思Hi3861L开发三-新建自定义项目
t_guest
Hi3861Hi3861
一、简介上一篇文章,介绍了如何下载安装SDK,并且编译和下载。但都是基于SDK原生提供的demo。那本节我们就来介绍一下,如果创建一个自己的项目。二、新建目录结构先看SDK提供的目录结构,如下图:因为是基于应用的开发,所以我们只关注app这个文件夹。可以看到app文件夹下只有一个demo文件夹,这个就是SDK提供的一个示例工程。那我们就在app下创建一个自己工程的文件夹“my_project”(这
- 2020-03-27-git部署本地项目到指定服务器
丢了魄的魂
服务器:1:在你服务器上理想位置创建一个文件夹:/data/git/my_project(注:文件夹名字就是你本地项目的名字)。2:切入到文件夹my_project中,执行:gitinit(注:初始化git仓库)。3:执行:gitconfigreceive.denyCurrentBranchignore(注:初始化仓库配置)。本地:1:切换到本地项目文件夹中:my_project/2:执行:git
- Pycharm根目录
zlq7777
Pythonpycharmidepython
在PyCharm中,当前文件的根目录默认是包含该文件的项目目录。如果当前文件在项目目录的子目录中,那么该子目录就是当前文件的根目录。例如,如果你的项目目录结构如下:my_project/├──main.py└──subdirectory/└──helper.py如果你在PyCharm中打开helper.py文件并运行它,那么它的根目录就是my_project/subdirectory。如果你想在P
- django结构分析
鱼开yk2
pythonweb
目录结构一个成熟的django项目的结构大致如下:djangoproject框架目录结构|my_project//项目名后期可修改建议不修改|---__init__.py//python项目必带模块化思想|---settings.py//项目的总配置文件里面包含数据库web应用时间等各种配置|---urls.py//URL配置文件Django项目中所有地址中(页面)都需要我们自己去配置其URL|-
- python+vue高校自习室预订系统django
yibo2022
djangopythonjava
基本实现了自习室预订系统应有的主要功能模块,本系统有管理员;首页、个人中心、学生管理、公告信息管理、座位预订管理、自习室管理、留言板管理、系统管理,学生;首页、个人中心、座位预订管理、留言板管理,前台首页;首页、公告信息、自习室、留言反馈、个人中心、后台管理、客服等功能。djangoproject框架目录结构|my_project//项目名后期可修改建议不修改|---__init__.py//py
- SpringCloud-Gateway在网关中统一返回对象
养一只tom猫
详见:https://gitee.com/xiangjunjiespace/my_project/tree/master/gateway
- 关于旗正规则引擎中的MD5加密问题
何必如此
jspMD5规则加密
一般情况下,为了防止个人隐私的泄露,我们都会对用户登录密码进行加密,使数据库相应字段保存的是加密后的字符串,而非原始密码。
在旗正规则引擎中,通过外部调用,可以实现MD5的加密,具体步骤如下:
1.在对象库中选择外部调用,选择“com.flagleader.util.MD5”,在子选项中选择“com.flagleader.util.MD5.getMD5ofStr({arg1})”;
2.在规
- 【Spark101】Scala Promise/Future在Spark中的应用
bit1129
Promise
Promise和Future是Scala用于异步调用并实现结果汇集的并发原语,Scala的Future同JUC里面的Future接口含义相同,Promise理解起来就有些绕。等有时间了再仔细的研究下Promise和Future的语义以及应用场景,具体参见Scala在线文档:http://docs.scala-lang.org/sips/completed/futures-promises.html
- spark sql 访问hive数据的配置详解
daizj
spark sqlhivethriftserver
spark sql 能够通过thriftserver 访问hive数据,默认spark编译的版本是不支持访问hive,因为hive依赖比较多,因此打的包中不包含hive和thriftserver,因此需要自己下载源码进行编译,将hive,thriftserver打包进去才能够访问,详细配置步骤如下:
1、下载源码
2、下载Maven,并配置
此配置简单,就略过
- HTTP 协议通信
周凡杨
javahttpclienthttp通信
一:简介
HTTPCLIENT,通过JAVA基于HTTP协议进行点与点间的通信!
二: 代码举例
测试类:
import java
- java unix时间戳转换
g21121
java
把java时间戳转换成unix时间戳:
Timestamp appointTime=Timestamp.valueOf(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:m
- web报表工具FineReport常用函数的用法总结(报表函数)
老A不折腾
web报表finereport总结
说明:本次总结中,凡是以tableName或viewName作为参数因子的。函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序。
CLASS
CLASS(object):返回object对象的所属的类。
CNMONEY
CNMONEY(number,unit)返回人民币大写。
number:需要转换的数值型的数。
unit:单位,
- java jni调用c++ 代码 报错
墙头上一根草
javaC++jni
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000777c3290, pid=5632, tid=6656
#
# JRE version: Java(TM) SE Ru
- Spring中事件处理de小技巧
aijuans
springSpring 教程Spring 实例Spring 入门Spring3
Spring 中提供一些Aware相关de接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到de匙ApplicationContextAware.实现ApplicationContextAwaredeBean,在Bean被初始后,将会被注入 Applicati
- linux shell ls脚本样例
annan211
linuxlinux ls源码linux 源码
#! /bin/sh -
#查找输入文件的路径
#在查找路径下寻找一个或多个原始文件或文件模式
# 查找路径由特定的环境变量所定义
#标准输出所产生的结果 通常是查找路径下找到的每个文件的第一个实体的完整路径
# 或是filename :not found 的标准错误输出。
#如果文件没有找到 则退出码为0
#否则 即为找不到的文件个数
#语法 pathfind [--
- List,Set,Map遍历方式 (收集的资源,值得看一下)
百合不是茶
listsetMap遍历方式
List特点:元素有放入顺序,元素可重复
Map特点:元素按键值对存储,无放入顺序
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
List接口有三个实现类:LinkedList,ArrayList,Vector
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身
- 解决SimpleDateFormat的线程不安全问题的方法
bijian1013
javathread线程安全
在Java项目中,我们通常会自己写一个DateUtil类,处理日期和字符串的转换,如下所示:
public class DateUtil01 {
private SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void format(Date d
- http请求测试实例(采用fastjson解析)
bijian1013
http测试
在实际开发中,我们经常会去做http请求的开发,下面则是如何请求的单元测试小实例,仅供参考。
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import
- 【RPC框架Hessian三】Hessian 异常处理
bit1129
hessian
RPC异常处理概述
RPC异常处理指是,当客户端调用远端的服务,如果服务执行过程中发生异常,这个异常能否序列到客户端?
如果服务在执行过程中可能发生异常,那么在服务接口的声明中,就该声明该接口可能抛出的异常。
在Hessian中,服务器端发生异常,可以将异常信息从服务器端序列化到客户端,因为Exception本身是实现了Serializable的
- 【日志分析】日志分析工具
bit1129
日志分析
1. 网站日志实时分析工具 GoAccess
http://www.vpsee.com/2014/02/a-real-time-web-log-analyzer-goaccess/
2. 通过日志监控并收集 Java 应用程序性能数据(Perf4J)
http://www.ibm.com/developerworks/cn/java/j-lo-logforperf/
3.log.io
和
- nginx优化加强战斗力及遇到的坑解决
ronin47
nginx 优化
先说遇到个坑,第一个是负载问题,这个问题与架构有关,由于我设计架构多了两层,结果导致会话负载只转向一个。解决这样的问题思路有两个:一是改变负载策略,二是更改架构设计。
由于采用动静分离部署,而nginx又设计了静态,结果客户端去读nginx静态,访问量上来,页面加载很慢。解决:二者留其一。最好是保留apache服务器。
来以下优化:
- java-50-输入两棵二叉树A和B,判断树B是不是A的子结构
bylijinnan
java
思路来自:
http://zhedahht.blog.163.com/blog/static/25411174201011445550396/
import ljn.help.*;
public class HasSubtree {
/**Q50.
* 输入两棵二叉树A和B,判断树B是不是A的子结构。
例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一
- mongoDB 备份与恢复
开窍的石头
mongDB备份与恢复
Mongodb导出与导入
1: 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的.
所以,都有如下通用选项:
-h host 主机
--port port 端口
-u username 用户名
-p passwd 密码
2: mongoexport 导出json格式的文件
- [网络与通讯]椭圆轨道计算的一些问题
comsci
网络
如果按照中国古代农历的历法,现在应该是某个季节的开始,但是由于农历历法是3000年前的天文观测数据,如果按照现在的天文学记录来进行修正的话,这个季节已经过去一段时间了。。。。。
也就是说,还要再等3000年。才有机会了,太阳系的行星的椭圆轨道受到外来天体的干扰,轨道次序发生了变
- 软件专利如何申请
cuiyadll
软件专利申请
软件技术可以申请软件著作权以保护软件源代码,也可以申请发明专利以保护软件流程中的步骤执行方式。专利保护的是软件解决问题的思想,而软件著作权保护的是软件代码(即软件思想的表达形式)。例如,离线传送文件,那发明专利保护是如何实现离线传送文件。基于相同的软件思想,但实现离线传送的程序代码有千千万万种,每种代码都可以享有各自的软件著作权。申请一个软件发明专利的代理费大概需要5000-8000申请发明专利可
- Android学习笔记
darrenzhu
android
1.启动一个AVD
2.命令行运行adb shell可连接到AVD,这也就是命令行客户端
3.如何启动一个程序
am start -n package name/.activityName
am start -n com.example.helloworld/.MainActivity
启动Android设置工具的命令如下所示:
# am start -
- apache虚拟机配置,本地多域名访问本地网站
dcj3sjt126com
apache
现在假定你有两个目录,一个存在于 /htdocs/a,另一个存在于 /htdocs/b 。
现在你想要在本地测试的时候访问 www.freeman.com 对应的目录是 /xampp/htdocs/freeman ,访问 www.duchengjiu.com 对应的目录是 /htdocs/duchengjiu。
1、首先修改C盘WINDOWS\system32\drivers\etc目录下的
- yii2 restful web服务[速率限制]
dcj3sjt126com
PHPyii2
速率限制
为防止滥用,你应该考虑增加速率限制到您的API。 例如,您可以限制每个用户的API的使用是在10分钟内最多100次的API调用。 如果一个用户同一个时间段内太多的请求被接收, 将返回响应状态代码 429 (这意味着过多的请求)。
要启用速率限制, [[yii\web\User::identityClass|user identity class]] 应该实现 [[yii\filter
- Hadoop2.5.2安装——单机模式
eksliang
hadoophadoop单机部署
转载请出自出处:http://eksliang.iteye.com/blog/2185414 一、概述
Hadoop有三种模式 单机模式、伪分布模式和完全分布模式,这里先简单介绍单机模式 ,默认情况下,Hadoop被配置成一个非分布式模式,独立运行JAVA进程,适合开始做调试工作。
二、下载地址
Hadoop 网址http:
- LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构
gundumw100
android
一切为了快速迭代
import java.util.ArrayList;
import org.json.JSONObject;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayo
- 三道简单的前端HTML/CSS题目
ini
htmlWeb前端css题目
使用CSS为多个网页进行相同风格的布局和外观设置时,为了方便对这些网页进行修改,最好使用( )。http://hovertree.com/shortanswer/bjae/7bd72acca3206862.htm
在HTML中加入<table style=”color:red; font-size:10pt”>,此为( )。http://hovertree.com/s
- overrided方法编译错误
kane_xie
override
问题描述:
在实现类中的某一或某几个Override方法发生编译错误如下:
Name clash: The method put(String) of type XXXServiceImpl has the same erasure as put(String) of type XXXService but does not override it
当去掉@Over
- Java中使用代理IP获取网址内容(防IP被封,做数据爬虫)
mcj8089
免费代理IP代理IP数据爬虫JAVA设置代理IP爬虫封IP
推荐两个代理IP网站:
1. 全网代理IP:http://proxy.goubanjia.com/
2. 敲代码免费IP:http://ip.qiaodm.com/
Java语言有两种方式使用代理IP访问网址并获取内容,
方式一,设置System系统属性
// 设置代理IP
System.getProper
- Nodejs Express 报错之 listen EADDRINUSE
qiaolevip
每天进步一点点学习永无止境nodejs纵观千象
当你启动 nodejs服务报错:
>node app
Express server listening on port 80
events.js:85
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at exports._errnoException (
- C++中三种new的用法
_荆棘鸟_
C++new
转载自:http://news.ccidnet.com/art/32855/20100713/2114025_1.html
作者: mt
其一是new operator,也叫new表达式;其二是operator new,也叫new操作符。这两个英文名称起的也太绝了,很容易搞混,那就记中文名称吧。new表达式比较常见,也最常用,例如:
string* ps = new string("
- Ruby深入研究笔记1
wudixiaotie
Ruby
module是可以定义private方法的
module MTest
def aaa
puts "aaa"
private_method
end
private
def private_method
puts "this is private_method"
end
end