标签: proc

何时使用lambda,何时使用Proc.new?

在Ruby 1.8中,proc/lambda与另一方面之间存在细微差别Proc.new.

  • 这些差异是什么?
  • 你能给出如何决定选择哪一个的指导方针吗?
  • 在Ruby 1.9中,proc和lambda是不同的.这是怎么回事?

ruby lambda proc

332
推荐指数
10
解决办法
8万
查看次数

为什么我们需要纤维

对于Fibers,我们有一个典型的例子:生成Fibonacci数

fib = Fiber.new do  
  x, y = 0, 1 
  loop do  
    Fiber.yield y 
    x,y = y,x+y 
  end 
end
Run Code Online (Sandbox Code Playgroud)

为什么我们需要光纤呢?我可以用相同的Proc重写这个(实际上是闭包)

def clsr
  x, y = 0, 1
  Proc.new do
    x, y = y, x + y
    x
  end
end
Run Code Online (Sandbox Code Playgroud)

所以

10.times { puts fib.resume }
Run Code Online (Sandbox Code Playgroud)

prc = clsr 
10.times { puts prc.call }
Run Code Online (Sandbox Code Playgroud)

将返回相同的结果.

那么纤维有什么优点呢?我可以用Fibers写什么样的东西我不能用lambdas和其他很酷的Ruby功能?

ruby lambda closures fibers proc

95
推荐指数
2
解决办法
2万
查看次数

to_proc方法是什么意思?

我正在学习rails并遵循这个主题.我坚持使用这种to_proc方法.我认为符号只是字符串的替代品(它们就像字符串,但在内存方面更便宜).如果还有其他我想念的符号,那么请告诉我.请以简单的方式解释什么to_proc方法和用途.

ruby syntax symbols block proc

44
推荐指数
3
解决办法
2万
查看次数

/ proc kcore文件很大

在遇到DDOS攻击之后,不知何故/proc/kcore非常巨大,我使用一个小的PHP类来检查当前的磁盘空间,以及已经使用了多少.

它显示以下内容:

Total Disk Space: 39.2 GB
Used Disk Space: 98 GB
Free Disk Space: 811.6 MB
Run Code Online (Sandbox Code Playgroud)

我的问题是,删除/proc/kcore文件是否安全?或者有一个解决方案,使其达到正常大小.

文件大小/proc/kcore为140.737.486.266.368字节

我在DigitalOcean托管了我的服务器.

如果需要了解更多信息,请询问;)

非常感谢!

编辑...

df -h 收益:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         40G   37G  755M  99% /
udev            993M   12K  993M   1% /dev
tmpfs           401M  224K  401M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none           1002M     0 1002M   0% /run/shm
Run Code Online (Sandbox Code Playgroud)

du -shx 收益:

du -shx *
8.7M    bin
27M     boot
12K …
Run Code Online (Sandbox Code Playgroud)

proc

35
推荐指数
3
解决办法
7万
查看次数

如何存储ruby代码块

我想在要重用的变量中存储"代码块",例如:

block = do
|test| puts test
end

3.upto(8) block
Run Code Online (Sandbox Code Playgroud)

有人能告诉我我在做什么这么显然是错的吗?(或者,如果这是不可能的)

ruby block proc

21
推荐指数
1
解决办法
9194
查看次数

Ruby中的&(和号)用于procs和调用方法的目的

我注意到很多处理Ruby Procs的例子都有以下&符号.

# Ruby Example
shout = Proc.new { puts 'Yolo!' }

def shout_n_times(n, &callback)
  n.times do
    callback.call
  end
end

shout_n_times(3, &shout)
# prints 'Yolo!' 3 times
Run Code Online (Sandbox Code Playgroud)

我的问题是&符号背后的功能目的是什么?似乎如果我没有&编写相同的确切代码,它按预期工作:

# Same code as previous without &
shout = Proc.new { puts 'Yolo!' }

def shout_n_times(n, callback)
  n.times do
    callback.call
  end
end

shout_n_times(3, shout)
# prints 'Yolo!' 3 times
Run Code Online (Sandbox Code Playgroud)

ruby proc

20
推荐指数
3
解决办法
5685
查看次数

如何评估`Proc#==`?

如何Proc#==评估?RDoc说:

prc == other_proc→true或false

如果prc与other_proc是同一个对象,或者它们都是具有相同主体的proc,则返回true.

但目前尚不清楚什么算是"同一个身体".一个条件似乎是arity必须是相同的:

->{} == ->{} # => true
->{} == ->x{} # => false
->x{} == ->x{} # => true
->x{} == ->y{} # => true
->x{} == ->y,z{} # => false
Run Code Online (Sandbox Code Playgroud)

但还有更多.正如RDoc所说,身体很重要:

->{nil} == ->{nil} # => true
->{nil} == ->{false} # => false
->{false} == ->{false} # => true
Run Code Online (Sandbox Code Playgroud)

但与此同时,看起来proc尚未得到充分评估:

->{} == ->{nil} # => false
->{false} == ->{1 == 2} # => false
Run Code Online (Sandbox Code Playgroud)

身体评估的程度如何?

ruby equality proc

15
推荐指数
1
解决办法
458
查看次数

如何以递归方式在ruby哈希中用""替换所有nil值?

str = "<a><b><c></c></b></a>"
hash = Hash.from_xml(str)
# => {"a"=>{"b"=>{"c"=>nil}}}
Run Code Online (Sandbox Code Playgroud)

如何替换nil哈希中的所有s以""使哈希变为:

{"a"=>{"b"=>{"c"=>""}}}
Run Code Online (Sandbox Code Playgroud)

ruby hash proc

14
推荐指数
1
解决办法
3575
查看次数

当内省模块类时,"#map(&proc)"成语如何工作?

介绍成语

我发现了一个有趣但无法解释的替代方案.代码清楚地在REPL中起作用.例如:

module Foo
  class Bar
    def baz
    end
  end
end
Foo.constants.map(&Foo.method(:const_get)).grep(Class)
=> [Foo::Bar]
Run Code Online (Sandbox Code Playgroud)

但是,我并不完全理解这里使用的习语.特别是,我不理解使用&Foo,这似乎是某种闭包,或者#grep的这种特定调用如何对结果进行操作.

解析成语

到目前为止,我已经能够解析这部分内容了,但我并没有真正看到它们是如何组合在一起的.以下是我认为我对示例代码的理解.

  1. Foo.constants 返回模块常量数组作为符号.

  2. method(:const_get)使用Object#方法执行方法查找并返回闭包.

  3. Foo.method(:const_get).call :Bar 是一个闭包,它返回类中常量的限定路径.

  4. &Foo似乎是某种特殊的lambda.文档说:

    如果Proc对象由&参数给出,&参数将保留技巧.

    我不确定我是否完全理解这在特定背景下的含义.为什么选择Proc?什么"诡计",为什么这里有必要?

  5. grep(Class)正在运行#map方法的值,但其功能并不明显.

问题,重申

我真的很想完全理解这个成语.任何人都可以在这里填补空白,并解释这些部分是如何组合在一起的吗?

ruby idioms constants introspection proc

13
推荐指数
1
解决办法
395
查看次数

TCL获取我所在的proc名称

如何知道我所处的过程的名称是什么.我的意思是我需要这个:

proc nameOfTheProc {} {

    #a lot of code here
    puts "ERROR: You are using 'nameOfTheProc' proc wrongly"
}
Run Code Online (Sandbox Code Playgroud)

所以我想获得"nameOfTheProc"但不是硬代码.因此,当有人更改proc名称时,它仍然可以正常工作.

tcl proc

12
推荐指数
3
解决办法
5774
查看次数

标签 统计

proc ×10

ruby ×8

block ×2

lambda ×2

closures ×1

constants ×1

equality ×1

fibers ×1

hash ×1

idioms ×1

introspection ×1

symbols ×1

syntax ×1

tcl ×1