标签: proc

什么是触发器和lambdas?请举例说明

可能重复:
何时使用lambda,何时使用Proc.new?

(我知道有几次被问过,但我找不到满意的答案)有人可以解释一下Blocks,Procs和Lambdas以及为什么应该使用其他的,当一个人应该使用proc,类似和/或拉姆达.还会对计算机内存产生影响.请举例说明.

ruby lambda block proc

3
推荐指数
1
解决办法
818
查看次数

Lambda vs Proc在内存和效率方面

我知道应该使用Procs和lambdas的不同情况(lambda检查参数数量等),但是它们会占用不同的内存量吗?如果是这样,哪一个更有效率?

ruby lambda proc

3
推荐指数
1
解决办法
409
查看次数

在Ruby中,可以显式创建局部变量

例如

x = 123
p = Proc.new {
  x = 'I do not want change the value of the outer x, I want to create a local x'
}
Run Code Online (Sandbox Code Playgroud)

在Ruby中是否有与Perl中的"my"关键字相同的东西?

ruby variables block local proc

3
推荐指数
1
解决办法
155
查看次数

使用/ proc/<pid>,如何识别网络端口号的应用程序?

我试图在没有root访问权限的情况下识别端口56474上运行的应用程序.我知道应用程序是由我启动的.

例:

netstat -tunap

tcp        0      0 0.0.0.0:56474           0.0.0.0:*               LISTEN      -               
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用/ proc/pid脚本在ls -l/proc/pid/fd结果上使用grep遍历所有内容.这是我的尝试.注意:不确定我是否朝着正确的方向前进

for I in `find /proc/*/fd -exec ls -l {} \; 2>/dev/null | awk -F"->|:" '/socket/ {print $4}' | sort -u | sed -e 's/\[//g' -e 's/\]//g'`; do grep $I /proc/*/net/tcp; done
Run Code Online (Sandbox Code Playgroud)

我没有成功.不确定是否有办法.谢谢.

sockets port tcp pid proc

3
推荐指数
1
解决办法
4581
查看次数

带有instance_eval的Ruby块范围

我对Ruby块和触发器的理解是它们都是闭包.现在我已经看到它与instance_eval一起使用,我有点困惑.什么是魔术酱,在查看裸机时的工作量不足,与使用instance_eval相比,它改变了块在大多数常见用途下的作用范围?

以下是您可以在IRB中转储以查看我的意思的示例.我已经包含了proc.call和block yield版本示例.令人高兴的是,他们的行为都是一样的.

# Testing block/proc and eval
class Example
  def initialize(value)
    # value defined in the instance
    @value = value
  end

  def call_a_proc(proc)
    proc.call self
  end

  def yield_to_block
    yield self
  end
end

# Value defined in the global object
@value = 1
example = Example.new 'a'

# the block/proc that prints @value
proc1 = -> instance { puts @value }

# instance calling/yielding the block/proc that prints @value
proc2 = -> instance { instance.call_a_proc proc1 }
proc3 = -> …
Run Code Online (Sandbox Code Playgroud)

ruby scope block instance-eval proc

3
推荐指数
1
解决办法
842
查看次数

将参数提供给&块

如果我们在集合上有一个方法,该方法采用一个块,而在每个元素上执行了另一个方法,则可以使用&符号将其写得更短。例如:如果我们有一个整数数组,并且想要删除奇数,我们可以这样做:

[1,2,3,4,5,6,7,8].reject {|x| x.odd?}
Run Code Online (Sandbox Code Playgroud)

使用与号,我们可以这样写:

[1,2,3,4,5,6,7,8].reject(&:odd?)
Run Code Online (Sandbox Code Playgroud)

假设我们有一个字符串数组,并且想要删除包含的元素'a'。我们可以这样编写解决方案:

['abc','cba','cbc','cdc','dca','cad','dc','cc].reject {|x| x.include? 'a'}
Run Code Online (Sandbox Code Playgroud)

我们如何使用与号语法编写此代码(如果可能)?

ruby methods proc

3
推荐指数
1
解决办法
343
查看次数

为什么varnum在sas中停止proc内容?

我有以下代码

ods select Variables;  
    proc contents data=xmlout.&XML_DSET;
    run;
Run Code Online (Sandbox Code Playgroud)

ods pdf open语句在代码中较早

ods pdf file="&exceldir\README.pdf" startpage=never;
title 'README FILE';
Run Code Online (Sandbox Code Playgroud)

这需要xmlout.&XML_DSET并且很好地将它放在pdf中(ods pdf close;稍后在代码中).

然而!

如果我把varnum按顺序放在数据集中就像变量一样存在

ods select Variables;  
    proc contents data=xmlout.&XML_DSET varnum;
    run;
Run Code Online (Sandbox Code Playgroud)

pdf根本不显示结果!

我究竟做错了什么?

谢谢!

pdf sas proc ods

3
推荐指数
1
解决办法
246
查看次数

ruby如何解压缩传递给Proc的参数?

a_proc = Proc.new {|a,b,*c| p c; c.collect {|i| i*b }}
puts a_proc[2,2,4,3]
Run Code Online (Sandbox Code Playgroud)

根据https://ruby-doc.org/core-2.2.0/Proc.html,上面的代码非常直观,a_proc [2,2,4,3]只是a_proc.call(2,2 ,4,3)隐藏“通话”

但是以下内容(效果很好)让我很困惑

a=[2,2,4,3]
puts a_proc.call(a)
puts a_proc.call(*a)
Run Code Online (Sandbox Code Playgroud)

似乎与普通的函数调用有很大不同,因为它不检查传入的数字参数。

但是,按预期方式,如果同样使用参数,则调用语义的方法将引发错误

def foo(a,b,*c)
  c.collect{|i| i*b}
end
foo([1,2,3,4]) #`block in <main>': wrong number of arguments (given 1, expected 2+) (ArgumentError)

foo(*[1,2,3,4]) #works as expected
Run Code Online (Sandbox Code Playgroud)

我不认为这种不一致是设计故障,因此,对此有任何见解将不胜感激。

ruby arguments argument-unpacking proc

3
推荐指数
1
解决办法
641
查看次数

为什么允许修改argv [0]?

我一直致力于一个使用PID /proc和命令行分析来验证系统进程的项目.我的代码必须由安全人员检查,他们设法用一条线来打破它......令人尴尬!

#!/usr/bin/env perl

$0="I am running wild"; # I had no clue you can do this!

system("cat /proc/$$/cmdline");
print("\n");
system("ps -ef | grep $$");

# do bad stuff here...
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 我看到了上面的一些用例,比如隐藏在命令行上给出的密码(也是不好的做法)但是当我可以隐藏进程和欺骗时,我会看到更多的问题/问题cmdline.它有被允许的原因吗?这不是一个系统漏洞吗?

  2. 我该如何预防或发现这个?我已经研究了/procmount选项.我也知道可以使用lsof基于意外行为识别欺骗过程,但这在我的情况下不起作用.目前我正在使用一个简单的方法来检测是否cmdline包含至少一个null(\0)字符,该字符假定至少存在一个参数.在上面的代码中,空格需要用空值替换以绕过该检查,这是我无法在perl中找到的方法 - 写入第一个\0.

谢谢

linux perl spoof proc cmdline-args

2
推荐指数
1
解决办法
265
查看次数

SAS:ODS EXCEL(如何命名不同的工作表)

我想导出一个由PROC TABULATE. 我的代码是这样的:

ODS EXCEL FILE="myFile.xlsx" (options sheet_name="CRIME TYPE");

  PROC TABULATE DATA=myData;
    TITLE 'myTitle';
    BY crime_type;
    CLASS year;
    CLASS nation / ORDER=FREQ;
    TABLES year, nationality / CONDENSE;
  RUN;

ODS EXCEL CLOSE;
Run Code Online (Sandbox Code Playgroud)

这为我创建了一个包含不同工作表的 excel 文件:

THEFT     
      country1  country2 country3 ...
--------------------------------------
1990           
1991
1992
--------------------------------------



ASSAULT  
      country1  country2 country3 ...
--------------------------------------
1990           
1991
1992
--------------------------------------
Run Code Online (Sandbox Code Playgroud)

不幸的是,这些表没有不同罪行(盗窃、袭击等)的名称,而是被称为“犯罪类型 1”、“犯罪类型 2”等等(SHEET_NAME="CRIME TYPE")。

有谁知道如何根据变量的值命名工作表crime_type

sas proc ods tabulate

2
推荐指数
1
解决办法
1461
查看次数