首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

辨析 Ruby 中的 Method 与 Proc

但是,Ruby 中的函数并没有其他动态语言中那么简单,它提供了 Method 与 Proc 两个类来表示函数的概念,对于这两个类的区别无论是官方文档还是 Stackoverflow 上的问题,解释的都非常模糊...map(myinc, [4,5,6]) # => [5, 6, 7] Ruby 中与其对应的是过程(Proc),与上面功能等价的 Ruby 代码为: myinc = Proc.new {|num...当&符号出现在函数参数列表中时,会把其后面的参数转为 Proc,并且把转化后的参数作为 block 传递给调用者。...proc形式不限制参数个数;而lambda形式严格要求一致 proc中的return语句对调用方有效;而lambda仅仅对其本身起作用 面向对象的 Method Ruby 中使用def定义的“函数”为Method...,与其他动态语言的函数等价 Method 专为面向对象设计,消息传递的第一个参数 弄清 Method 与 Proc 的区别后,不得不欣赏 Ruby 语言设计的巧妙,兼具函数式与面向对象的精髓。

93320

两个主题:躲避execve与分析proc目录

下面我来说一下,这种方式按我的猜想该怎么监控: 复制一份的bash,bash的MD5是不会变的,在安全基线中有进程文件哈希库:一个名字不是bash的文件哈希 和bash一样,你觉得可不可疑呢?...通常,它是由系统自动安装的,但是也可以使用以下命令手动安装: mount -t proc proc /proc proc文件系统中的大多数文件都是只读的,但是有些文件是可写的,允许更改内核变量。...]/statm /proc/[pid]/status /proc/[pid]/syscall /proc/[pid]/wchan auxv /proc/[pid]/auxv包含传递给进程的 ELF解释器信息...-2.5.5 TERM=xterm SHELL=/bin/bash HISTSIZE=3000 IRBRC=/usr/local/rvm/rubies/ruby-2.5.5/.irbrc...SSH_CLIENT=113.97.33.208 58836 22 MY_RUBY_HOME=/usr/local/rvm/rubies/ruby-2.5.5 SSH_TTY=/dev/pts

1.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《Effective-Ruby》读书笔记

    没有什么会阻止你意外地把 Time 类型对象传递给接受 Date 对象的方法,这些类型的问题虽然可以通过测试避免,但仍然有一些多态替换的问题使这些经过测试的应用程序出现问题: undefined method...第 7 条:了解 super 的不同行为 当你想重载继承体系中的一个方法时,关键字 super 可以帮你调用它。 不加括号地无参调用 super 等价于将宿主方法的素有参数传递给要调用的方法。...true end 第 20 条:考虑使用默认哈希值 我确定你是一个曾经在块的语法上徘徊许久的 Ruby 程序员,那么请告诉我,下面这样的模式在代码中出现的频率是多少?...第 33 条:使用别名链执行被修改的方法 在设置别名链时,需要确保别名是独一无二的 必要的时候要考虑提供一个撤销别名链的方法 第 34 条:支持多种 Proc 参数数量 与弱 Proc 对象不同,在参数数量不匹配时...,强 Proc 对象会抛出 ArgumentError 异常 可以使用 Proc#arity 方法得到 Proc 期望的参数数量,如果返回的是正数,则意味着有多少参数是必须的。

    4K60

    从0到1打牢算法基础之手写一个哈希表

    从0到1打牢算法基础之手写一个哈希表 0.导语 目的:手写实现一个哈希表,采用拉链法构建,每个hash(key)对应的是一个红黑树。 看起来很简单,但可以学到很多东西。实现语言:C++。...1.简易版哈希表 我们将哈希表封装在一个类中,完成遍历的定义与声明以及构造、析构的实现: template class HashTable {...,里面有一个比较重要的哈希函数,这里我们先自己定义一个: /** * 哈希函数 * @param key * @return */ int hashFunc(Key key) { std::hash...:1,c:3,rust:1,python:3} resize 2 size=3,maxCapacity=6,minCapacity=2 {python:3,ruby:1,rust:1} 至此,完成了一个简单的哈希表...1.优化哈希表 在gcc2.9版本中,底层的哈希表是以素数作为容量动态修改的,因此这里的优化从这里出发: 类内部开头添加下面数组: // 素数数组 const vector capacity

    1.2K20

    Ruby 和 Java 的基础语法比较

    声明代码块,函数式方法传参甚至不用使用 () (挺有意思) 经过以上讲解,大家可能会对开始产生一些兴趣,不过这仅仅只是开始,后面主要简单介绍一下 Ruby 常用的对象,条件,循环,方法,运算符,数值,...Java 中最常用的 K-V 结构的 Hash 实现是基于 Map 接口的 HashMap,它是一种非线程安全的哈希表实现,之所以常用是因为它兼顾的效率和时间的平衡,内部是通过数组实现,采用使用链表法处理哈希冲突...简单通过 2 段代码的对比,我们可以对两种语言的方法参数得出以下结论: Java 方法会严格按照定义,强制要求类型,值必传,否则编译期会报错,并且无法在声明时定义参数的默认值 Ruby 方法参数未设定默认值...,不传参数,只会在执行期报错,但如果声明时定义参数默认值,则参数可不传 Ruby 方法参数无需定义类型,动态语言的类型大多是推断出来的 可变参数两者实现方式相同,Java 通过 类型...names 实现...Ruby 和 Java 在其他使用层面的使用区别对比,例如字符串,数据类型,集合,哈希,最后想留一个问题:你觉得静态语言和动态语言最明显的区别在哪里?

    2.2K20

    这个项目教你如何可视化哈希函数的工作原理

    哈希就是将不同的输入映射成独一无二的、固定长度的值(又称 "哈希值"),是最常见的软件运算之一。很多网络服务会使用哈希函数,产生一个 token,标识用户的身份和权限。 那它是如何运行的呢?...哈希函数可以把给定的数据转换成固定长度的无规律数值。此处为方便读者理解,我们借用《我的第一本算法书》里的比喻:将哈希函数想象成搅拌机。 ?...哈希函数有一系列特征,如上图所示,输出的哈希值与输入数据的大小、长度等没有任何关系。 ? 若输入相同,输出的哈希值也必定相同。 ? 如输入不同,输出的哈希值也必然不同,哪怕是只有细微区别。 ?...在输入数据完全不同的情况下,输出的哈希值有可能是相同的,这种少数特殊情况称为“哈希冲突”。 ? 同时,哈希值是不可逆的,也就是说,通过哈希值不可能反向推算出原本的数据。...这即是一轮压缩,对于信息调度中的每个词该过程都会重复一次。 在压缩了整个消息调度之后,我们将得到的哈希值添加到初始哈希值中,由此得出消息块的最终哈希值。

    1.3K20

    msfconsole在渗透测试中的一些总结(高级篇)

    在前期的教程中,我讲过讲msf的进程转移的其他软件的方法,今天来看看另外的一种方法。...run post/windows/gather/hashdump image.png 脚本和post模块都需要通过“run”命令执行,数据的输出格式为:用户名:SID:LM哈希:NTLM哈希:::。...可选参数如下: -H:创建一个隐藏进程 -a:传递给命令的参数 -i:跟进程进行交互 -m:从内存中执行 -t:使用当前伪造的线程令牌运行进程 -s:在给定会话中执行进程 创建一个新账号 接下来,我们可以在目标系统中创建一个新的用户账号...和msf终端、ruby接口、目标shell交互的命令) background(进程隐藏至后台) sessions(查看已经成功获取的会话,-i 恢复会话) quit(关闭当前会话) shell (...获取系统控制台shell,如果目标系统命令行可执行程序不存在或禁止访问, 则shell命令会出错) irb(与Ruby终端交互,调用metasploit封装好的函数;在irb中还可以添加metasploit

    1K10

    linux下的程序调试方法汇总

    ls -l /proc'的输出结果,通过对 系统中运行的每一个进程在/proc文件系统中有一个以进程id命名的项。每个进程的细节信息可以在进程id对应的目录下的文件中获得。...也可以'ls /proc/pid'的输出 解释/proc文件系统内的所有条目超出了本文的范围。...一些有用的列举如下: /proc/cmdline -> 内核命令行 /proc/cpuinfo -> 关于处理器的品牌,型号信息等 /proc/filesystems -> 文件系统的内核支持的信息 /...对于用户,它显示了系统调用、传递给它们的参数和返回值。strace的可以附着到已在运行的进程或一个新的进程。它作为一个针对开发者和系统管理员的诊断、调试工具是很有用的。...给程序传参数: 使用'set args'给你的程序传参数,当程序下次运行时将获得该参数。'show args'将显示传递给程序的参数。

    4K21

    LogStash的配置详解

    ,哈希的语法跟数组一样。...新的结果如下: 这样可以实现数据完全透传,不需要加一层message kv 参数 类型 是否必须 默认值 说明 field_split string 否 分割字符 field_split_pattern...配置改成: filter 区段之内,是顺序执行的。所以我们最后看到的输出结果是: •merge 合并两个数组或者哈希字段。...而在 filters/ruby 里,我们可以通过 "init" 参数预定义好由每个新字段的名字组成的数组, 然后在 "code" 参数指定的 Ruby 语句里通过两个数组的 zip 操作生成一个哈希并添加进数组里...exec 调用命令执行(Exec) outputs/exec 插件的运用也非常简单,如下所示,将 logstash 切割成的内容作为参数传递给命令。

    1.5K20

    ruby学习笔记(11)--symbol与hash参数

    "0001",在ruby解释器内部每次也都是当作不同的对象来处理的,这样随着字符中的调用次数增加,ruby解释器的负担不是越来越重,内存消耗越来越大?...有没有一种方法,让ruby在内部记录一下,如果遇到相同内容的字符串,就不用再生成新的String对象,而是直接取已经存在的对象返回呢?...至于"=>"这个是什么意思,也就是下面要讲的哈希参数: 先来看一下哈希表(HashTable),这个跟c#中的没什么不同,基本上也就是一个"键-值"对的集合 products = {"0001"=>"手机..."0001"=>"手机",:"0002"=>"电脑"} puts products[:"0001"] 哈希参数指的其实就是在调用方法并传入参数时,可以将一个哈希表做为参数传入 def my_method...,这个写法是不是跟link_to 'Show', :action => 'show', :id => product一样时尚了 :) 题外话:哈希参数与可选参数还是有些不同的(可选参数参见"ruby学习笔记

    1K100

    redis-cluster配置

    2.正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力 ?  数据分布 ? 顺序分区 ? 哈希分区(redis-cluster用的是哈希分区) 节点取余 ?...例如按照节点取余的方式,分三个节点 1~100的数据对3取余,可以分为三类 余数为0 余数为1 余数为2 那么同样的分4个节点就是hash(key)%4 节点取余的优点是简单,客户端分片直接是哈希+取余...一致性哈希 客户端进行分片,哈希+顺时针取余 虚拟槽分区  ?...分布式架构 多个服务端,负责读写,彼此通信,redis指定了16384个槽,ruby的脚本自动就把分配槽位这事做了 ?...安装方式 官方提供通过ruby语言的脚本一键安装 1.环境准备 通过配置,开启redis-cluster port 7000 daemonize yes dir "/opt/redis/data" logfile

    1K20

    深入解析Apache Pulsar系列(一):客户端消息确认

    被标记为已经消费的消息,后续不会再次重复投递给消费者。在这篇文章中,我们会介绍Pulsar中消息确认的模式,以及正常消息确认在Broker侧是如何实现的。...最后就是Tracker的flush,所有的确认最终都需要通过触发flush方法发送到Broker,无论是哪种确认,flush时创建的都是同一个命令并发送给Broker,不过传参中带的AckType会不一样...(二)negativeAcknowledge的实现 否定应答和其他消息确认一样,不会立即请求Broker,而是把请求转交给NegativeAcksTracker进行处理。...Broker侧会把这些已经推送到Consumer本地的消息记录为pendingAck,并且这些消息也不会再投递给别的消费者,且不会ack超时,除非当前Consumer被关闭,消息才会被重新投递。...这个Tracker会记录消息到底被重新投递了多少次,每条消息推送给消费者时,会先从Tracker的哈希表中查询一下重投递的次数,和消息一并推送给消费者。

    2.3K30

    Dynamo:Amazon的高可用性的键-值存储系统

    Dynamo采用一致性哈希的方法来定位key到node,采用一致性哈希的优点是: 节点加入和退出时,只影响哈希环中相邻的节点。...——五分钟理解一致性哈希算法 起初一致性哈希是为了解决新加入节点和退出节点对数据的影响最小,但是由于数据分布的不均匀,热点数据,节点能力的异构都会造成分布不均匀,于是加入了virtual nodes,但是为了同一份数据的...针对永久性故障,我们解决方案是Merkle哈希树。Merkle的原理是:每个非叶子节点对应多个文件,值是其所有子节点值组合以后的哈希值,叶子节点对应单个数据文件,值是文件内容的哈希。...成员资格及错误检测 最开始介绍过一致性哈希,为了保证能够直接找到key对应的node,因此所有的node中都保存了集群中所有node的路由信息,这就导致有新节点加入或者节点推出的时候,需要将这信息传递给集群内的所有人...,于是就有了Gossip 从上图中能看到Gossip就是在AP系统中特有的, 在看下下面这张图,说明了Gossip算法 1传3,3传9,9传27,快速扩散,然后整个集群就都知道了。

    90620

    DevOps工具介绍连载(48)——静态扫描工具Brakeman

    质量分配 使用String#strip或String.squish(#1459)检查SQL查询字符串 处理(#1465)locals哈希中的非符号键render 渲染参数中的索引调用(#1459) 全球批量分配...例如: ActiveRecord::Base.connection.execute "SELECT * FROM #{user_input}".squish 本地哈希中的非符号键 使用符号文字以外的其他值作为...locals哈希中的键render将不再导致错误。...模型文件名 在某些情况下,警告丢失了文件名,因为该文件名未传递给模型处理器。 现在将传递文件名,并且测试套件中有一个针对警告文件名的新测试。...Ruby 2.7冻结字符串 在Ruby 2.7中,符号和其他一些常量值(true/ false等)将返回冻结的字符串。这仅以较小的方式影响了Brakeman,但现在已修复,以准备Ruby 2.7。

    2.2K10

    红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础数据类型(data types)EP02

    Ruby是强类型静态语言,即Ruby中一旦某一个对象被定义类型,如果不通过强制转换操作,那么它永远就是该数据类型,并且只有在Ruby解释器运行时才会检测对象数据类型,它的一切皆为对象(包括...其它语言中,可能一元操作符是原处修改的,对应的二元运算是非原处修改的,所以其它语言中使用一元运算方式效率可能会稍高一些,但Ruby中是等价的,所以说变了,一元运算符在Ruby中的作用仅仅是减少代码量,而并非有性能优化的空间...所有符号对象存放在 Ruby内部的符号表中,可以通过类方法 Symbol.all_symbols 得到当前 Ruby 程序中定义的所有 Symbol 对象,该方法返回一个 Symbol 对象数组。    ...需要注意的是,符号是不可变对象。    哈希(Hash)     哈希是一种非常有用且广泛使用的复合容器对象,可用于存储其他对象。我们通过键(key)来查找哈希中的值(value)。...结语     字符、数字、布尔是不可变对象,而字符串、数组、哈希是可变对象,Ruby3中所有不可变对象的多个同值对象,都会指向同一个对象的内存地址。

    1.5K20

    CPU占用率爆满,服务器遭遇挖矿如何排查

    8196 ruby /opt/gitlab/embedded/service/gitaly-ruby/bin/gitaly-ruby 490 /tmp/gitaly-ruby360216715/socket.../PID」 ┌──[root@liruilongs.github.io]-[~] └─$ll /proc/134004 ls: cannot access /proc/134004: No such file...记录每个文件的状态(包括数据的时间,大小,权限,哈希值等) 当计算机被入侵以后,aide对计算机做同样的校验,同样的检查 最后,通过对比入侵之前检查的结果和入侵之后的检查结果,找到哪些数据发生了哪些变化...#校验文件的大小是否变化 ...... 42 #md5: md5 checksum #校验文件md5生成的哈希值 43 #sha1: sha1 checksum #校验文件sha1生成的哈希值 44...#sha256: sha256 checksum #校验文件sha256生成的哈希值 ......

    5.7K20
    领券