我想在ruby中模拟像hadoop这样的系统的函数map和reduce函数的实现,以验证这个想法是否至少有效.
我有以下问题.我有两个元素列表:
List1
3 - A
4 - B
5 - C
7 - D
8 - F
List2
2 - A
8 - B
6 - C
9 - D
4 - E
Run Code Online (Sandbox Code Playgroud)
我需要构建一个通用列表,其中包含与两个列表中常见字母相关联的数字总和:
commonList
5 - A
12 - B
11 - C
16 - D
Run Code Online (Sandbox Code Playgroud)
我想用map和reduce操作来制作一个ruby脚本来解决这个问题.我不确定如何解决这个问题或在ruby脚本中用什么程序来模拟这个问题.
任何帮助赞赏.
我期待代码
foo=proc{puts "foo"}
instance_exec(1,2,3,&foo) do |*args , &block|
puts *args
block.call
puts "bar"
end
Run Code Online (Sandbox Code Playgroud)
输出
1 2 3 foo bar
但得到了错误
both block arg and actual block given
我可以将一个本身期望块的块传递给ruby中的instance_exec吗?
从语言设计的角度来看,为什么红宝石块不是一流的?
类似地,我认为块实际上应该是lambdas,从而摆脱了繁琐的语法需求,例如proc {...}.call或&proc或lambda或Proc.new.这也将摆脱对收益的需求.
在执行时cipher.final,它说bad decrypt错误.我试图找出问题.但是,我找不到.你能告诉我的代码有什么问题吗?
这是我的代码:
require 'openssl'
require 'base64'
require 'hex_string'
result_h ="4fcd6b1ac843a2f8bf13f2e53dd5c1544fcd6b1ac843a2f8"
key = result_h.to_byte_string
encrypt_str="79994A6EF73DA76C";
cipher = OpenSSL::Cipher.new("DES-EDE3-CBC")
cipher.decrypt
cipher.key = key
data = encrypt_str.to_byte_string
res = cipher.update( data )
res << cipher.final
result_h= res.unpack("H*")[0]
puts result_h.inspect;
Run Code Online (Sandbox Code Playgroud)
错误是:
in `final': bad decrypt (OpenSSL::Cipher::CipherError)
Run Code Online (Sandbox Code Playgroud) 我如何使用PHP 5.3 Closures,比如我们在Ruby中使用Blocks.我从来没有在Ruby中使用'for'循环,因为使用带有'each''read_all''inject'方法的块.
我如何使用像Ruby块这样的PHP 5.3闭包,并说再见'for'Loops :)
就像在{和}之间是一个闭包(或块或匿名函数)
fruit = %w[apple banana orange]
fruit.each { |f| print "#{f}, " }
Run Code Online (Sandbox Code Playgroud)
我用PHP这样做,
$fruit = array('apple', 'banana', 'orange');
foreach ($fruit as $f)
{
print "$f, ";
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用PHP闭包的Ruby方式,因为PHP 5.3支持它.
我正在构建一个多语言Web应用程序,可以随时更改界面语言。这意味着,除其他外,注册/资料表格上的国家名称选择器也应翻译。
因此,我想知道网络上是否存在某种集中式资源,用于以所有或多种(或某些)语言显示国家名称。我只需要其中的三种,而且我知道最终我会自己将英语名称(可以在网上轻松找到)翻译成其他两种语言。可以,除非我的客户添加了我不会说的更多语言。当然,在名称之间应该有一些映射,例如通过2个字母的代码。
考虑一个像这样的简单枚举器:
natural_numbers = Enumerator.new do |yielder|
number = 1
loop do
yielder.yield number
number += 1
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么ruby要求我们在yielder对象上调用yield?换句话说:为什么我们不能代替yielder.yield number用yield number?在这个例子中,如果允许的话,它看起来是一样的.有没有以非平凡的方式使用yielder的例子?如果是这样,你能给一个吗?如果没有,yielder的目的是什么?
谢谢.
我正在尝试创建一个非常简单的案例:一个控制器动作,该动作从模板呈现一个静态JSON。
控制器:
defmodule MyApp.TestController do
use Phoenix.Controller
def show(conn, _params) do
render(conn, "show.json")
end
end
Run Code Online (Sandbox Code Playgroud)
视图:
defmodule MyApp.TestView do
use MyApp.Web, :view
end
Run Code Online (Sandbox Code Playgroud)
show.json.eex:
{
"message": "Hello, world!"
}
Run Code Online (Sandbox Code Playgroud)
问题是,我得到了正确的JSON响应,但是使用JSON编码:
"{\n \"message\": \"Hello, world!\"\n}"
Run Code Online (Sandbox Code Playgroud)
任何想法为什么,以及如何解决?
/编辑:
我发现可以通过将模板重命名为其他名称json(当然,还要明确设置响应类型)来解决此问题,因此显然可以对JSON模板进行额外编码。但是为什么,谁会想要这样的东西呢?
出于某种原因,我无法弄清楚这一点.但基本上我想与模型进行比较,看看他们是否有任何匹配的电子邮件.这是我的尝试,但这不是出于某种原因工作的.
>> CardReferral.all.select{|cf|cf.email == CardSignup.all.collect{|cs|cs.email}}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式返回对象..