我有一个方法,我想决定在map函数中返回什么.我知道这可以通过分配变量来完成,但这就是我可以做到的事情;
def some_method(array)
array.map do |x|
if x > 10
return x+1 #or whatever
else
return x-1
end
end
end
Run Code Online (Sandbox Code Playgroud)
这不会像我期望的那样工作,因为第一次return被击中,它从方法返回,而不是在map函数中返回,类似于javascript的map函数中返回的使用方式.
有没有办法实现我想要的语法?或者我是否需要将其分配给变量,并将其挂在最后,如下所示:
def some_method(array)
array.map do |x|
returnme = x-1
if x > 10
returnme = x+1 #or whatever
end
returnme
end
end
Run Code Online (Sandbox Code Playgroud) 我试图使用webmock来模拟来自web api的意外行为,例如找不到服务器和超时.
最好的方法是什么?我能想到的就是做这样的事情:
stubbed_request = stub_request(:get, "#{host}/api/something.json").
with(:headers => {'Accept'=>'*/*', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}).
to_return(:status => [500, "Internal Server Error"])
Run Code Online (Sandbox Code Playgroud)
这应该适用于像404等,但我如何测试超时,服务器未找到/脱机服务器,没有互联网连接?
我有一个非常奇怪的问题.在我的iOS上的cordova应用程序中,当我长按应用程序中的任何位置时,我会得到一个弹出式文本选择放大镜.
例:
顶部的气泡锁定在屏幕顶部,当我的手指从一侧移动到另一侧时,按照我的x位置.
我试图添加以下css,人们说应该解决我的问题:
* {
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-touch-callout: none;
-webkit-user-select: none;
}
Run Code Online (Sandbox Code Playgroud)
这没有用.在Web检查器中查看内容,我可以确认此css已成功添加到所有内容中.我已经尝试了一堆正常的不同变化touch-callout: none和user-select: none每个人都认为,没有什么没什么帮助.
我还尝试删除所有的javascript和所有CSS,除了上面提到的简单变体,放大镜仍然出现.
我怎么能让它消失?是否有任何插件可能导致此问题?任何帮助深表感谢.
Cordova插件:
Cordova版本:5.1.1 iPhone 5s,iOS版本:9.0.1
有没有办法强制更新Gemfile.lock没有安装已更改的宝石?
我使用两个不同的插件到cordova,它们都有相同的uses-feature,一个有android:required="false"一个没有.
这会导致构建时出错:
processDebugManifest
/path/to/project/platforms/android/AndroidManifest.xml:31:5 Error:
Element uses-feature#android.hardware.camera at AndroidManifest.xml:31:5 duplicated with element declared at AndroidManifest.xml:27:5
/path/to/project/platforms/android/AndroidManifest.xml:32:5 Error:
Element uses-feature#android.hardware.camera.autofocus at AndroidManifest.xml:32:5 duplicated with element declared at AndroidManifest.xml:28:5
/path/to/project/platforms/android/AndroidManifest.xml:0:0 Error:
Validation failed, exiting
:processDebugManifest FAILED
.....
ERROR building one of the platforms: Error: /path/to/project/platforms/android/cordova/build: Command failed with exit code 1
You may not have the required environment or OS to build this project
Run Code Online (Sandbox Code Playgroud)
编译后的清单在构建时具有以下内容:
...
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" /> …Run Code Online (Sandbox Code Playgroud) 我一直试图找到一个很好的解决方案很长一段时间:
有没有一种可靠的方法将ruby安装到可在该平台上移植的文件夹中?我想要一个文件夹,我可以很容易地复制到我正在制作的发行版中,这样我就可以"随时随地"拥有一个红宝石环境.如果我需要编译源代码和东西,这很好,只要我最终安装了便携式ruby.
我找到了一些试图解决这个问题的资源,但没有一个能让我满意.
http://hcettech.blogspot.pt/2012/05/windows-portable-rails-development.html
对我来说,这是Ruby的一个主要痛点.如果在没有客户端首先安装Ruby的情况下无法使Ruby脚本工作,那么ruby在我的情况下基本上没有用.我真的希望我/我们可以解决这个问题,因此有可能让Ruby比现有的更有用.
注意:我知道像Releasy这样的东西存在,但它仍然不是一个简单的ruby可执行文件.
我的目标是能够创建一个带有.bat/.sh脚本的文件夹,它执行此操作:
#some bat/sh
./bin/ruby ./my_script.rb
Run Code Online (Sandbox Code Playgroud)
是的,如果我对此问题有所了解,请将我击倒,因为这对我来说是一种解脱.
我正在制作一个程序,其中一个问题是我需要对某些整数中的位模式进行一些分析.
因此,我希望能够做到这样的事情:
#Does **NOT** work:
num.each_bit do |i|
#do something with i
end
Run Code Online (Sandbox Code Playgroud)
通过这样做,我能够创造出有效的东西:
num.to_s(2).each_char do |c|
#do something with c as a char
end
Run Code Online (Sandbox Code Playgroud)
然而,这没有我想要的性能.
我发现你可以这样做:
0.upto(num/2) do |i|
#do something with n[i]
end
Run Code Online (Sandbox Code Playgroud)
这比该each_char方法的性能更差
这个循环将被执行数百万次或更多次,所以我希望它尽可能快.
作为参考,这是整个功能
@@aHashMap = Hash.new(-1)
#The method finds the length of the longes continuous chain of ones, minus one
#(101110 = 2, 11 = 1, 101010101 = 0, 10111110 = 4)
def afunc(n)
if @@aHashMap[n] != -1
return @@aHashMap[n]
end …Run Code Online (Sandbox Code Playgroud) 我试图建立一个完全基本的Titan Rexster Cassandra实例,但我似乎无法打破代码.我现在已经尝试了很多东西来使它工作,但我似乎无法让它工作.无论我读了多少,我都无法正确设置它.
我想要的是一个以嵌入模式运行的Titan-rexster-cassandra实例,其中包含一些索引,包括弹性搜索.在我阅读完所有内容之后,似乎这是我在下载titan-server-0.4.0并运行bin/titan.sh start命令时应该得到的.这也启动了服务器.但是:当我尝试为此添加索引时,没有任何反应.当我尝试在RexPro上填充它时,没有添加任何内容.
当我重新启动服务器时,我的图表消失了.当我去的时候,它不再出现在Rexster图表列表中http://localhost:8182/graphs.因此看起来我的数据不会持续存在,或者至少在rexster中消失.
我觉得我已经尝试了一切来实现这个目的:
.properties包含搜索索引,如下所示:storrage.index.search.backend=elasticsearch....properties(所有的)使用的文件cassandra,embeddedcassandra并cassandrathrift为storage.backendtitan.sh文件,看看实际发生了什么,然后转到这些指示的配置文件,并看看那里发生了什么,我已经尝试了很多东西,如上所述.我已经在这一周内挣扎了一个多星期,可能是两个甚至更多,我开始失去信心.我正在考虑回到neo4j,但不幸的是我真的需要Titan的可扩展性.但是,如果我不能让它工作,那就没用了.我觉得可能有一些微不足道但却必不可少的事情,我没想到或忘记了.
有没有人知道那里的指南带你从绝对的划痕(例如,启动一个新的VM或其他东西),或接近它,到一个运行弹性搜索索引的titan-rexster-cassandra实例?或许,如果你很棒,提供这样的指南?我感到失落 :(
关键点:
Ubuntu 12.04(也试过13.10.同样的问题)
泰坦0.4.0
目标:要获得持久性,请使用弹性搜索索引顶点名称属性,并获得具有权重的边.
像这样连接ruby rexpro:
require "rexpro" #the "rexpro" gem
rexpro_client = Rexpro::Client.new(host: 'the.ip.of.my.machine.running.rexster', port: 8184)
results = rexpro_client.execute("g.getClass()", graph_name: "graph").results
#=> returns the following: class com.thinkaurelius.titan.graphdb.database.StandardTitanGraph
Run Code Online (Sandbox Code Playgroud)
我遵循以下步骤来创建数据库不存在的问题:
Ubuntu 12.04 LTS使用名称vmname(或其他)创建一个新的小型(1核,1.75GB ram)VM .ssh azureuser@vmname.cloudhost.net -p 22 …有一种简单的方法可以测试多个变量在ruby中具有相同的值吗?
有点像这样:
if a == b == c == d #does not work
#Do something because a, b, c and d have the same value
end
Run Code Online (Sandbox Code Playgroud)
当然可以针对主机检查每个变量以查看它们是否都是真的,但这是更多的语法并且不那么清楚.
if a == b && a == c && a == d #does work
#we have now tested the same thing, but with more syntax.
end
Run Code Online (Sandbox Code Playgroud)
你需要这样的东西的另一个原因是你在测试之前是否确实对每个变量都有效.
if array1.sort == array2.sort == array3.sort == array4.sort #does not work
#This is very clear and does not introduce unnecessary variables
end
#VS
tempClutter = array1.sort …Run Code Online (Sandbox Code Playgroud) OpenSSL::SSL::SSLErrorWaitReadable "read would block"意思?我收到错误OpenSSL::SSL::SSLErrorWaitReadable消息read would block.我认为这是因为超时,但我找不到有关该主题的任何文档.
偶尔产生此错误的代码:
data = {hello: "world"}
path = "https://example.com/api"
uri = URI.parse(path)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == "https")
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
request = Net::HTTP::Post.new(uri.request_uri)
request.body = Oj.dump(data)
request["Content-Type"] = "application/json"
begin
response = http.request(request) #this line produces the error.
rescue
return nil
end
Run Code Online (Sandbox Code Playgroud)
我在osx上使用ruby版本2.1.5p273和openssl版本.1.0.1i10.10.3
使用命令找到版本 ruby -v -ropenssl -rfiddle -e 'puts Fiddle::Function.new(Fiddle.dlopen(nil)["SSLeay_version"], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)'
感谢@bayendor