标签: proc

什么是允许块处理可变数量的参数的简洁方法?

我之前遇到过这种情况,有些东西告诉我我一般处理它的方式不是最干净或最惯用的.

假设我有一个带块的函数,它可以依次取1或2个(比如说)参数.

def with_arguments(&block)
  case block.arity
  when 1
    block.call("foo")
  when 2
    block.call("foo", "bar")
  end
end

with_arguments do |x|
  puts "Here's the argument I was given: #{x}"
end

with_arguments do |x, y|
  puts "Here are the arguments I was given: #{x}, #{y}"
end
Run Code Online (Sandbox Code Playgroud)

打开arity看起来很漂亮.是否有更标准的Ruby方法来实现这种事情?

ruby block proc

4
推荐指数
1
解决办法
1076
查看次数

SAS proc中的BY语句比较

使用ID语句与proc比较中的BY语句有什么区别.

我理解ID语句 - 当添加的观察结果根据ID进行比较时..但是BY语句究竟做了什么..

我确实阅读了SAS文档并搜索了我无法理解的网络,任何人都可以详细说明.

compare sas proc

4
推荐指数
1
解决办法
364
查看次数

不知道为什么会在这里使用Proc - 不要简单

我理解proc的概念,但有时我看到这样的代码(从rails指南中获取验证http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-if-and-unless-with-a-proc):

class Order < ActiveRecord::Base
  before_save :normalize_card_number,
    :if => Proc.new { |order| order.paid_with_card? }
end
Run Code Online (Sandbox Code Playgroud)

看来这可以更简单地写成:

class Order < ActiveRecord::Base
  before_save :normalize_card_number, :if => :paid_with_card? 
end
Run Code Online (Sandbox Code Playgroud)

我在这里没有了解使用Proc的优势?

thx提前

ruby ruby-on-rails proc

4
推荐指数
1
解决办法
62
查看次数

为什么我不能在Ruby中将块传递给proc?

为什么我不能这样做:

do_once = Proc.new { yield }
do_once.call { puts 1 }

irb抛出 LocalJumpError: no block given (yield)

ruby proc

4
推荐指数
2
解决办法
1004
查看次数

在Rails模型验证中使用哪个更好:Proc或lambda?

我知道proc和lambda之间的区别。根据以下准则,在Rails模型验证中使用哪个更好:Proc或lambda?

程序:

  • 与块类似的行为。
  • 可以存储在变量中并在周围移动。
  • 参数数量没有问题。
  • return 从proc中退出将退出调用该方法的方法。

Lambda:

  • 与Proc相同,但更接近方法。
  • 严格考虑它获取和需要的参数。
  • return 从lambda中退出将退出lambda,并且调用该方法的方法将继续执行。

但是我还没有看到能使它有所作为的验证:

validates :name, present: true, if: -> { assotiation.present? }
validates :name, present: true, if: proc { |c| c.assotiation.present? }
Run Code Online (Sandbox Code Playgroud)

我检查了rubocop,但没有发现任何建议。您知道在ruby / rails样式指南,rubocop或其他工具中哪个更好?

ruby validation lambda ruby-on-rails proc

4
推荐指数
1
解决办法
172
查看次数

C程序打印自己的地址空间?

我阅读cat /proc/[pid]/maps了有关其地址空间的信息.所以我想编写一个程序来打印自己的地址空间.

我的节目是这样的;

  pid_t pid;
  int fd;
  char *buf;

  pid = getpid();

  fd = open("/proc/????/maps", O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

我正在获取PID,但它无法帮助我打开文件.如何将pid转换pid_t为字符串并将其添加到open调用?

或者有没有其他方法来打开文件?

c linux systems-programming proc

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

SAS中Proc语句中ID语句的功能是什么?

我正在努力将SAS代码复制到R代码中,我遇到了以下SAS代码片段 -

proc means data=A noprint;
by name date; 
id comp_no;
var price; 
id rep_dats act no;
output out= test(drop=_type_ _freq_)        
median=median n=num; 
run;
Run Code Online (Sandbox Code Playgroud)

我知道'by'语句用于分组以提供该级别的统计信息.但是,'id'用于什么?为什么有两个'id'陈述?我检查了SAS帮助,但我真的不明白.我还在http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#p19dfq16fqt1t3n1eroiabnn6r3s.htm查看了他们的示例.但没有说明ID使用的例子.

因为我无法访问SAS,所以我无法尝试这一点,看看输出是怎样的.任何澄清对我都有很大帮助.谢谢!

r sas mean proc

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

PROC NLIN 从 SAS 到 R

我目前被分配了一项工作,我需要将 SAS 代码翻译成 R。我已经成功完成了 80%,现在我被困在使用 PROC NLIN 的部分。从我读到的,PROC NLIN 用于拟合非线性模型,我不确定代码是否真的这样做,因此,坚持如何在 R 中做到这一点。代码如下 -

proc nlin data=ds1 outest=estout;
 parms ET= 0 f= 10.68;
  E= f- R*(1-ET*M); 
  L   = E*E;
  model.like = sqrt(E*E);
  by Name ; 
run;
Run Code Online (Sandbox Code Playgroud)

样本数据如下——

Name    M           R
Anna    0.5456231   4.118197
Anna    0.5359164   4.240243
Anna    0.541881    3.943975
Anna    0.5436047   3.822222
Anna    0.5522962   3.58813
Anna    0.5561487   3.513195
Anna    0.5423374   3.666507
Anna    0.525836    3.715371
Anna    0.5209941   3.805572
Anna    0.5304675   3.750689
Anna    0.5232541   3.788292
Run Code Online (Sandbox Code Playgroud)

当我浏览 SAS 帮助中 PROC NLIN 的页面时,参数“模型”用于指定方程,但此处的代码没有模型方程。Model.like 是指定似然函数(第 4316 …

r sas nonlinear-functions nls proc

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

如何知道Proc是否是Ruby中的lambda

假设我已经创建了一个lambda实例,我想稍后查询这个对象以查看它是proc还是lambda.怎么做到这一点?.class()方法不起作用.

irb(main):001:0> k = lambda{ |x| x.to_i() +1 }
=> #<Proc:0x00002b931948e590@(irb):1>
irb(main):002:0> k.class()
=> Proc
Run Code Online (Sandbox Code Playgroud)

ruby lambda introspection proc

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

在 Ruby 中让一个类继承 Proc

我一直在尝试继承ProcRuby中的类。我知道有很多其他方法可以实现我的类而无需实际继承Proc,但现在出于好奇我想知道。

我想要一个可以在没有作为参数传递的块的情况下实例化的类,但它就是行不通(似乎就是原因)。很明显,您无法在Proc没有块的情况下实例化实际对象(即使使用procor也不行lamba):

Proc.new proc {|x| 2 * x } # => ArgumentError: tried to create Proc object without a block
Proc.new lambda {|x| 2 * x } # => ArgumentError: tried to create Proc object without a block
Run Code Online (Sandbox Code Playgroud)

我认为重写initialize可能会解决问题,但实际上重写也new行不通:

class MyClass < Proc
  def new *args, &block
    super { |x| 2 * x }
  end

  def initialize *args, &block
    super { |x| 2 * …
Run Code Online (Sandbox Code Playgroud)

ruby lambda inheritance proc

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