小编Moh*_*nia的帖子

在Ruby块中使用'return'

我正在尝试将Ruby 1.9.1用于嵌入式脚本语言,以便"最终用户"代码在Ruby块中编写.这个问题的一个问题是我希望用户能够在块中使用'return'关键字,因此他们不需要担心隐式返回值.考虑到这一点,这是我希望能够做到的事情:

def thing(*args, &block)
  value = block.call
  puts "value=#{value}"
end

thing {
  return 6 * 7
}
Run Code Online (Sandbox Code Playgroud)

如果我在上面的例子中使用'return',我会得到一个LocalJumpError.我知道这是因为有问题的块是Proc而不是lambda.如果我删除'return',代码就可以工作,但我真的更喜欢在这种情况下使用'return'.这可能吗?我已经尝试将块转换为lambda,但结果是一样的.

ruby lambda return proc-object

83
推荐指数
3
解决办法
5万
查看次数

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" }
Run Code Online (Sandbox Code Playgroud)

通过"行为差异",我包括错误处理,性能,工具支持等.

ruby yield

75
推荐指数
4
解决办法
4万
查看次数

当块传递时,Array#sort如何工作?

我有一个问题,了解如何array.sort{ |x,y| block }正常工作,因此如何使用它?

Ruby文档中的一个示例:

   a = [ "d", "a", "e", "c", "b" ]
   a.sort                     #=> ["a", "b", "c", "d", "e"]
   a.sort { |x,y| y <=> x }   #=> ["e", "d", "c", "b", "a"]
Run Code Online (Sandbox Code Playgroud)

ruby arrays sorting

74
推荐指数
4
解决办法
8万
查看次数

如何在Ruby中创建可重用的块/ proc/lambda?

我想创建一个过滤器,并能够将其应用于数组或散列.例如:

def isodd(i)
  i % 2 == 1
end
Run Code Online (Sandbox Code Playgroud)

我希望能够像这样使用它:

x = [1,2,3,4]
puts x.select(isodd)
x.delete_if(isodd)
puts x
Run Code Online (Sandbox Code Playgroud)

这似乎应该是直截了当的,但我无法弄清楚我需要做什么才能让它发挥作用.

ruby

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

Ruby中这些块编码样式的区别或价值是什么?

哪种款式首选?一个与另一个有充分的理由吗?

提前致谢!

1) cmds.each do |cmd|
   end

2) cmds.each { |cmd|
   }
Run Code Online (Sandbox Code Playgroud)

示例代码:

cmds = [ "create", "update", "list", "help" ]

# Block style one
#
cmds.each do |cmd|
  puts "loop1, cmd: #{cmd}"
end

# Block style two
#
cmds.each { |cmd|
  puts "loop2, cmd: #{cmd}"
}
Run Code Online (Sandbox Code Playgroud)

ruby coding-style

32
推荐指数
4
解决办法
4154
查看次数

何时使用块

我喜欢Ruby块!他们背后的想法非常简洁.

我刚刚回顾了过去一周左右的代码,这基本上是我写过的每一个ruby函数,我注意到它们中没有一个返回值!我总是使用一个块来传回数据,而不是返回值!

我甚至发现自己正在考虑编写一个小的状态类,这将允许我编写如下代码:

something.do_stuff do |status|
  status.success do 
    # successful code
  end

  status.fail do
    # fail code
    puts status.error_message
  end
end
Run Code Online (Sandbox Code Playgroud)

我是否过多使用积木?是否有时间使用块和时间来使用返回值?

有什么问题需要注意吗?我有多大时间使用积木来咬我吗?

ruby

23
推荐指数
3
解决办法
2076
查看次数

检测DOM元素的内联/块类型

如何检测DOM元素是块还是内嵌javascript?

例如,是否有一个函数/属性为' <a>'标签返回'inline' (或''标签'为'block' <p>)?

谢谢.

javascript dom inline

21
推荐指数
2
解决办法
7768
查看次数

编码Objective-c块?

是否可以使用?编码Objective-C块NSKeyedArchiver

我不认为Block对象是NSCoding-compliant,因此[coder encodeObject:block forKey:@"block"]不起作用?

有任何想法吗?

objective-c nscoding objective-c-blocks

17
推荐指数
1
解决办法
2278
查看次数

#define XX在C中有什么影响?

在LLVM项目的源代码中stdbool.h,它显示为:

/* Don't define bool, true, and false in C++, except as a GNU extension. */
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Define _Bool, bool, false, true as a GNU extension. */
#define _Bool bool
#define bool  bool
#define false false
#define true  true
#endif
Run Code Online (Sandbox Code Playgroud)

在最后4行中有三行from #define X X.为什么要这么做?它有什么不同?难道这个强制编译器不会替换,比方说,truetrue

c c++ llvm llvm-clang

17
推荐指数
2
解决办法
2595
查看次数

如何在.NET WebBrowser控件中阻止下载?

我需要阻止.NET WebBrowser控件显示"您要打开还是保存此文件?" 和"另存为"对话框.相反,我想显示一个消息框,告诉用户出于安全原因禁用了文件下载.

我从FileDownload事件开始WebBrowser,但不允许取消.然后,我使用CodeProject:Extended .NET 2.0 WebBrowser Control中的方法,使用该接口基于原始COM调用实现我自己的事件DWebBrowserEvents2.当我根据有关FileDownload签名的错误的MS知识库条目修复代码时,调用了事件处理程序,我能够取消下载.

但这并不适用于所有下载:下载指向URL的URL,包括.exe引发事件,可以在对话框出现之前取消 - 但对于其他人(如.do),事件处理程序在用户单击之前不会被调用Open,Save或者Cancel在对话.

一个可能的解决方案可能是拦截WH_CALLWNDPROCRET消息并在向用户显示之前"回答"对话框,但这听起来很费劲,我也更喜欢更清洁的解决方案......

有谁知道如何可靠地阻止所有下载?

.net browser download

16
推荐指数
1
解决办法
1万
查看次数