在thrice方法的Ruby中,以下两个实现之间的行为差异是什么?
module WithYield
def self.thrice
3.times { yield } # yield to the implicit block argument
end
end
module WithProcCall
def self.thrice(&block) # & converts implicit block to an explicit, named Proc
3.times { block.call } # invoke Proc#call
end
end
WithYield::thrice { puts "Hello world" }
WithProcCall::thrice { puts "Hello world" }
Run Code Online (Sandbox Code Playgroud)
通过"行为差异",我包括错误处理,性能,工具支持等.
我最近发现了Ruby的块和屈服特征,我想知道:这在计算机科学理论方面适合哪些方面?它是一种函数式编程技术,还是更具体的?
我一直在Ruby中编写相同的代码模式,看起来它会受益于'do'样式的代码,但我不确定如何编写该方法.
我一直在做这种代码模式,它以相同的代码行开始和结束......
x.increment!(:step_count) # same each time
# ...then some different code each
x.update_column(:step_description, "blerg message") # same each time
Run Code Online (Sandbox Code Playgroud)
我觉得它会受益于'做'这样的东西......
update_steps "blerg message" do
# ...then some different code each
end
Run Code Online (Sandbox Code Playgroud)
然后在'do'内部每次执行公共代码.
我将如何制作一个可以使用'do'的方法.
谢谢!
编辑:我认为不要关闭它是很重要的,因为我不知道要搜索'block'或'yield'.可能不知道这些术语的人最终可能会搜索"do".
我还在学习红宝石,红宝石等等.我越来越了解所有的ruby和rails语法,但这个让我有点难过.
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @contact_lists }
end
Run Code Online (Sandbox Code Playgroud)
我认为,respond_to是一种采取行动的方法.这两种格式看起来也可能是方法调用,但我不知道.
我有一个清单:
list = ["mango", "apple", "pearl", "peach"]
Run Code Online (Sandbox Code Playgroud)
我需要使用yield这行代码:
answer = myIndexOf(list) {|e| e == "apple"}
Run Code Online (Sandbox Code Playgroud)
返回值1,该值是"apple"数组中的索引.
我有这个,但我不明白yield.
def myIndexOf(list)
yield answer if block_given?
result = list.index(answer)
return answer
end
Run Code Online (Sandbox Code Playgroud)
任何人都可以对此有所了解吗?
以下代码完美无缺.
@doc = open(link) { |f| Hpricot(f) }
Run Code Online (Sandbox Code Playgroud)
但是我想使用下面的代码,它似乎与Hpricot块不匹配(例如@doc是一个TempFile对象,而不是Hpricot文档对象)
@doc = resolve_link(link) { |f| Hpricot(f) }
def resolve_link(link)
begin
return open(link)
rescue
logger.debug("#{$!} for link #{link}")
raise Exceptions::ErrorResolvingLink.new("Cannot resolve link #{link}.")
end
end
Run Code Online (Sandbox Code Playgroud)
知道如何让代码的第二个版本工作吗?