天道酬勤,学无止境

Ruby:Proc.new {'waffles'} 与 proc {'waffles'}(Ruby: Proc.new { 'waffles' } vs. proc { 'waffles' })

问题

在 Ruby 中, Proc.new { 'waffles' }proc { 'waffles' }之间有什么区别吗? 我发现很少有人提到第二种语法。

通过使用irb进行测试,我没有发现任何明显的差异。 第二个语法糖是第一个吗?

回答1

来自 Metaprogamming Ruby 第 113 页。

在 Ruby 1.8 中,Kernel#proc() 实际上是 Kernel#lambda() 的同义词。 由于程序员的强烈抗议,Ruby 1.9 将 proc() 改为 Proc.new() 的同义词。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Ruby: Proc.new { 'waffles' } vs. proc { 'waffles' }
    In Ruby, are there any differences between Proc.new { 'waffles' } and proc { 'waffles' }? I have found very few mentions of the second syntax. From testing using irb, I haven't found any obvious differences. Is the second syntactic sugar for the first?
  • 何时在Ruby on Rails中使用lambda?(When to use a lambda in Ruby on Rails?)
    问题 什么时候应该使用lambda或proc? 我已经看到它们被描述为匿名函数,但是我很难理解这个概念。 我希望您能在Ruby中使用任何链接或示例,尤其是在Ruby on Rails中。 回答1 http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/简要介绍了什么是block / procs / lambda,如何使用它们以及它们与其他语言的功能比较。 它肯定回答了您的问题。 请注意,上一节“关于lambdas的说明”提到的一点仅在Ruby 1.8中适用,而在1.9版中已更改-Ruby:Proc.new {'waffles'}与proc {'waffles'} 回答2 我看不出您在Ruby on Rails和Ruby之间有什么区别。 如果您正在编写Ruby on Rails应用程序,那么您正在编写Ruby代码,因此,如果它在Ruby中有用,则在Ruby on Rails中也应有用。 无论如何,这篇文章,《 Ruby中的一些有用的闭包》应该是有帮助的,以及以下内容:http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/ 回答3 什么是lambda? 与您的irb一起尝试。 lam =
  • 在 Ruby 中按字母顺序对数组进行排序,但在末尾使用大写单词(Sort an array alphabetically in Ruby but with capitalised words at the end)
    问题 我正在尝试在 Ruby 中按字母顺序对字符串进行排序。 问题是,它将大写单词放在字符串的开头,但我希望它们放在结尾。 我原来的字符串是: ["Apple", "banana", "Zebra", "orange"] 我想要什么: ["banana", "orange", "Apple", "Zebra"] 回答1 交换案例进行排序: ["Apple", "banana", "Zebra", "orange"].sort_by(&:swapcase) #=> ["banana", "orange", "Apple", "Zebra"] 回答2 我假设您想对字符串进行排序,但将大写单词移动到排序算法的末尾。 如果只有第一个字符大写,这有效: p ["banana", "Banana","orange", "Apple", ].sort_by{|x| [x[0].upcase==x[0] ? 1:0,x] } #=> ["banana", "orange", "Apple", "Banana"] p ["banana", "Banana","orange", "Apple", ].sort #=> ["Apple", "Banana", "banana", "orange"] 回答3 编辑:显然根据 Cary Swoveland 的说法,这将比使用 sort_by 快
  • 使用 XQuery 和 Java 将元素插入到 XML 中(Insert element into XML using XQuery and Java)
    问题 我需要使用 XQuery 插入表达式将新元素插入到 XML 文档中。 我使用saxon作为 java api。 我是 XQuery 的新手,所以我不确定插入表达式的确切结构。 任何人都可以帮助我。 我的 XML 文件如下所示: <?xml version="1.0" encoding="ISO-8859-1"?> <breakfast_menu> <food> <name>Belgian Waffles</name> <price>$5.95</price> <description>two of our famous Belgian Waffles with plenty of real maple syrup<description> <calories>650</calories> </food> </breakfast_menu> 我用于执行插入的java代码是 public void insert() throws XQException{ String queryString = //"declare variable $docName as xs:string external;" + sep + "variable $stores := doc("+"food.xml"+")/*;"+ "insert node element food {"+
  • 机器人学习--Turtelbot3学习-- Burger与waffle等版本的切换
    Turtlebot3 有3款, Burger、waffile和 waffle pi。 安装好后,默认是用的Burger款。 如果需要换成另外两个,则需要在用户家目录下编辑 .bashrc 文件。 gedit .bashrc 之后在文件内找到如下内容,将waffle 换成Burger 或者 waffle pi source /opt/ros/kinetic/setup.bash source /opt/ros/kinetic/setup.bash source ~/cartographer_ws/devel_isolated/setup.bash export TURTLEBOT3_MODEL=waffle source ~/catkin_ws/devel/setup.bash export TURTLEBOT3_MODEL=waffle source ~/catkin_ws/devel/setup.bash export TURTLEBOT3_MODEL=waffle export SVGA_VGPU10=0 保存完之后,执行 source .bashrc 即可生效 来源:https://blog.csdn.net/GGY1102/article/details/114937547
  • 将 Waffle Spring Security XML 配置迁移到 Spring Boot(Migrating a Waffle Spring Security XML configuration to Spring Boot)
    问题 我正在尝试以 Spring Boot 方式将 Waffle 身份验证与 Spring Security 结合使用。 预期结果是“如果协商失败则阻止一切”。 Waffle 项目为这种用例提供​​了一个配置示例(在此示例中,如果 Negotiate 失败,则回退到简单的 HTTP 身份验证,我不需要),假设配置是通过web.xml完成的。 但是尽管进行了多次尝试,我还是不明白如何使用 Boot 和 Java-only 配置将 Waffle 与 Spring Security 连接起来。 我正在使用 Spring Boot 1.2.1.RELEASE 和 starters web 和 security,Waffle 版本是 1.7.3。 我意识到这不是一个具体的问题,但 Spring 论坛现在重定向到这里,华夫饼的人不知道 Spring Boot。 有人可以帮我将 XML Spring Security 配置转换为 Spring Boot 吗? 第一步是声明过滤器链和上下文加载器侦听器。 <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <
  • Ruby:Proc#call与收益率(Ruby: Proc#call vs yield)
    问题 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" } 通过“行为差异”,我包括错误处理,性能,工具支持等。 回答1 我认为第一个实际上是另一个的语法糖。 换句话说,没有行为上的差异。 第二种形式允许的是将块“保存”在变量中。 然后可以在其他时间点调用该块-回调。 好的。 这次我去做了一个快速基准测试: require 'benchmark' class A def test 10.times do yield end end end class B def test(&block) 10.times do block
  • 如何使用java配置在spring中配置waffle(How to configure waffle in spring using java configuration)
    问题 我一直在努力使华夫饼使用 spring java 配置与 spring 4.2.5 一起工作。 我想我也可以帮助处于同样情况的其他人。 我们使用自定义的 preWaffle 和 postWaffle 过滤器来验证用户在通过 waffles NTLM 协议验证后是否存在于我们的数据库中。 我们还有使用 EnableGlobalMethodSecurity 注释来授权用户操作的方法。 至少可以说,要在 spring java 配置中实现这一点是很麻烦的。 您可以在下面的答案中找到我们的解决方案。 我希望它会有所帮助。 回答1 配置文件 // ... imports @Configuration @EnableWebMvc @EnableScheduling @PropertySources({ @PropertySource("classpath:app.properties") // ... Properties sources }) @EnableTransactionManagement @ComponentScan(basePackages = "com.our.package") public class SpringConfiguration extends WebMvcConfigurerAdapter { // Our Spring configuration
  • Menu dividers in ncurses
    I'd like to build a menu in ncurses that has section dividers. My example list looks like this: Aardvark Apple Bee Cat Kitten Kalashnikov Waffle What I want is non-selectable dividers. Something like this: (A) ---- Aardvark Apple (B) ---- Bee (C) ---- Cat (K) ---- Kitten Kalashnikov (W) ---- Waffle Is there a built-in way to do this? More specifically, I'm using this ruby gem: https://github.com/eclubb/ncurses-ruby I'd prefer an answer that was generic, but if it can be solved with Ruby awesomeness, that's cool too.
  • ncurses 中的菜单分隔符(Menu dividers in ncurses)
    问题 我想在具有部分分隔符的 ncurses 中构建一个菜单。 我的示例列表如下所示: Aardvark Apple Bee Cat Kitten Kalashnikov Waffle 我想要的是不可选择的分隔线。 像这样的东西: (A) ---- Aardvark Apple (B) ---- Bee (C) ---- Cat (K) ---- Kitten Kalashnikov (W) ---- Waffle 有没有内置的方法来做到这一点? 更具体地说,我正在使用这个 ruby​​ gem:https://github.com/eclubb/ncurses-ruby 我更喜欢一个通用的答案,但如果它可以用 Ruby 超棒来解决,那也很酷。 回答1 假设您正在谈论 ncurses 菜单库(作为“内置”),您可以使用 set_item_opts 制作不可选择的项目。
  • Proc.arity 与 Lambda.arity(Proc.arity vs Lambda.arity)
    问题 为什么 proc 和 lambda 为 arity 返回不同的值? 例如 proc { |x = 0| }.arity #=> 0 lambda { |a = 0| }.arity #=> -1 proc { |x=0, y| }.arity #=> 1 lambda { |x=0, y| }.arity #=> -2 请参阅:http://www.ruby-doc.org/core-2.0/Proc.html#method-i-arity 回答1 根据您链接到的文档: 返回不会被忽略的参数数量。 如果声明块不接受任何参数,则返回 0。如果已知该块恰好接受 n 个参数,则返回 n。 如果块具有可选参数,则返回 -n-1,其中 n 是必需参数的数量。 没有参数声明的 proc 与声明 || 的块相同作为其论据。 文档忘记提及的是 procs 和 lambda 不会以完全相同的方式处理参数,例如: >> p = proc { |a = 1, b| b } => #<Proc:0x007ff0091ef810@(irb):1> >> l = lambda { |a = 1, b| b } => #<Proc:0x007ff0098099f8@(irb):2 (lambda)> >> p.call => nil >> l.call ArgumentError: wrong
  • Java分数计算器(Java fraction calculator)
    问题 我对 Java 编程真的很陌生,而且我的 AP 计算机编程课程有一个作业到期,所以请耐心等待。 我必须弄清楚如何将两个分数相乘。 我想知道是否有任何方法可以在方法内部声明一个变量并在该方法之外使用它(我在 intro 方法中的 while 循环)。 谢谢,希望不要混淆! import java.util.Scanner; import java.util.StringTokenizer; public class javatest3 { static int num1 = 0; static int num2 = 0; static int denom1 = 0; static int denom2 = 0; public static void main(String[] args){ System.out.println("Enter an expression (or \"quit\"): "); //prompts user for input intro(); } public static void intro(){ Scanner input = new Scanner(System.in); String user= input.nextLine(); while (!user.equals("quit") & input.hasNextLine()){ /
  • SSO waffle 询问用户名和密码(SSO waffle asking username and password)
    问题 我正在尝试从 http://repo1.maven.org/maven2/com/github/dblock/waffle/waffle-filter-demo/1.6/waffle-filter-demo-1.6 下载华夫饼“华夫饼过滤器演示”的演示。战争 我使用 tomcat 作为 servlet 容器并部署了 war 文件。 当我尝试使用 URL http://localhost:8080/waffle-filter-demo-1.6/ 访问服务器时,我能够通过当前的 Windows 登录进行身份验证,并且我的 Windows 用户已通过身份验证。 但是当我使用 IP 地址 http://192.168.2.63:8080/waffle-filter-demo-1.6/ 访问相同的 url 时。 华夫饼要求我输入用户名和密码。 有没有人遇到过这种情况? 如何通过使用IP地址访问获得认证成功? 回答1 我已经按照 https://community.jalios.com/jcms/jx_73408/en/windows-authentication-waffle-plugin-12?cid=jc_84212 解决了这个问题。 您必须配置 Web 浏览器才能将 Windows 身份验证发送到远程 HTTP 服务器。 为自动登录配置Internet Explorer
  • SSO waffle asking username and password
    I am trying to run demo of waffle 'waffle filter demo' download from http://repo1.maven.org/maven2/com/github/dblock/waffle/waffle-filter-demo/1.6/waffle-filter-demo-1.6.war I am using tomcat as servlet container and deployed the war file. When I try to access the server with URL http:// localhost:8080/waffle-filter-demo-1.6/ I am able to get authenticated through current windows login and my windows user is authenticated. But when I access the same url using IP address http:// 192.168.2.63:8080/waffle-filter-demo-1.6/. Waffle is asking me to enter username and password. Anyone came across
  • Migrating a Waffle Spring Security XML configuration to Spring Boot
    I'm trying to use Waffle authentication with Spring Security, in a Spring Boot fashion. Expected result is 'block everything if Negotiate fails'. Waffle project provides a configuration example for this kind of use case (there is in this example a fallback to simple HTTP auth if Negotiate fails, which I don't need), assuming configuration is done through web.xml. But despite many attempts, I don't understand how to plug Waffle with Spring Security using Boot and Java-only configuration. I'm using Spring Boot 1.2.1.RELEASE with starters web and security, Waffle version is 1.7.3. I realize that
  • 如何在python中制作华夫饼图? (方形饼图)(How to do waffle charts in python? (square piechart))
    问题 像这样的东西: 在 R 中有一个很好的包可以做到这一点。在 python 中,我能想到的最好的方法是使用squarify包(灵感来自关于如何做树图的帖子): import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns # just to have better line color and width import squarify # for those using jupyter notebooks %matplotlib inline df = pd.DataFrame({ 'v1': np.ones(100), 'v2': np.random.randint(1, 4, 100)}) df.sort_values(by='v2', inplace=True) # color scale cmap = mpl.cm.Accent mini, maxi = df['v2'].min(), df['v2'].max() norm = mpl.colors.Normalize(vmin=mini, vmax=maxi) colors = [cmap(norm(value)) for value in
  • Spring Security + Waffle:Kerberos 身份验证在 IE 11 中失败,在 Firefox 中工作正常(Spring Security + Waffle: Kerberos authentication fails with IE 11, in Firefox works fine)
    问题 我有一个 Spring Boot + Spring Security + Waffle 应用程序,如果从 Firefox 访问页面,它可以很好地进行身份验证。 如果我从 IE 11 执行同样的操作,第一个身份验证序列将正确执行,但是一旦我尝试单击链接,我就会收到 401 Unauthorized。 与我在 IE 11 和 Firefox 的 Fiddler 中看到的相比,存在差异,但我真的不知道这是否以及如何影响这一点。 Firefox :获取 401,发送带有协商标头的请求,获取带有 set-cookie 的 200,从那时起只发送 cookie,不再发送协商标头。 IE 11 :获取 401,发送带有协商标头的请求,获取带有设置 cookie 的 200,从那时起发送 cookie 和协商标头。 当 IE 失败时,我会收到来自服务器的响应,如下所示: HTTP/1.1 401 Unauthorized Server: Apache-Coyote/1.1 X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Frame
  • Waffle & font family not found in Windows font database
    I am trying to get the folowing code to work so that it will display the glyph medkit or any other icons from the FontAwesome font inside my waffle plot. library(waffle) library(extrafont) font_import() loadfonts(device = "postscript") which does display Registering font with R using postscriptFonts(): FontAwesome parts <- c(`Un-breached\nUS Population`=(318-11-79), `Premera`=11, `Anthem`=79) waffle(parts/10, rows=3, colors=c("#969696", "#1879bf", "#009bda"), use_glyph="medkit", size=8) When I run waffle I get the following errors: Warning messages: 1: Removed 3 rows containing missing values
  • Ruby - lambda vs. Proc.new [duplicate]
    This question already has answers here: Closed 9 years ago. Possible Duplicate: What's the difference between a proc and a lambda in Ruby? When run this Ruby code: def func_one proc_new = Proc.new {return "123"} proc_new.call return "456" end def func_two lambda_new = lambda {return "123"} lambda_new.call return "456" end puts "The result of running func_one is " + func_one puts "" puts "The result of running func_two is " + func_two The result that I get is as follows: The result of running func_one is 123 The result of running func_two is 456 As for func_two, where is the the value of the
  • Confused about jQuery handling of my data
    So likely not the best title but that's what I think is going on. I wrote this question wanting to populate a dropdownlist in my jqGrid so the user could pick from the available selections for filtering. The solution provided works in one instance but not in another. The first type it retrieves the data (for the column header dropdown filter) my stack trace looks like so: callback() jquery-1.6.2.js (line 7947) _ = readystatechange done() jquery-1.6.2.js (line 7183) status = 200 statusText = "success" responses = Object { text="["Cake", "Sugar", "Waffle"]" } headers = "Server: ASP.NET Develop