我之前遇到过这种情况,有些东西告诉我我一般处理它的方式不是最干净或最惯用的.
假设我有一个带块的函数,它可以依次取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方法来实现这种事情?
使用ID语句与proc比较中的BY语句有什么区别.
我理解ID语句 - 当添加的观察结果根据ID进行比较时..但是BY语句究竟做了什么..
我确实阅读了SAS文档并搜索了我无法理解的网络,任何人都可以详细说明.
我理解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提前
为什么我不能这样做:
do_once = Proc.new { yield }
do_once.call { puts 1 }
irb抛出 LocalJumpError: no block given (yield)
我知道proc和lambda之间的区别。根据以下准则,在Rails模型验证中使用哪个更好:Proc或lambda?
程序:
return 从proc中退出将退出调用该方法的方法。Lambda:
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或其他工具中哪个更好?
我阅读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调用?
或者有没有其他方法来打开文件?
我正在努力将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,所以我无法尝试这一点,看看输出是怎样的.任何澄清对我都有很大帮助.谢谢!
我目前被分配了一项工作,我需要将 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 …
假设我已经创建了一个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) 我一直在尝试继承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)