这是一个高级概念性问题.我有两个单独的代码库,用于相同的目的,一个用Python构建,另一个用Ruby构建.我需要开发一些可以在JVM上运行的东西.所以我有两个选择:将Python代码转换为Jython或将Ruby转换为JRuby.由于我不知道他们中的任何一个,我想知道是否有人可以给我一些指导.喜欢哪一个运行得更快,或者更重要的是哪一个有可用于轻松进行代码迁移的工具(.pyc到.jar文件)?
如果函数作为lambda存储在变量中,是否可以调用函数(发送消息)对象?
说我有一个类似的数组 %w(a b c)
然后我可以链接方法,如:
%w(a b c).reverse.map(&:upcase) # => ["C", "B", "A"]
Run Code Online (Sandbox Code Playgroud)
是否可以将链式方法调用提取到变量并将其应用于其他数组对象?
transform = -> { reverse.map(&:upcase) }
Run Code Online (Sandbox Code Playgroud)
我试过以下但没有运气:
使用JRuby 1.7.1
%w(a b c).send(transform)
TypeError: #<Proc:0x19a639d8@(irb):12 (lambda)> is not a string
Run Code Online (Sandbox Code Playgroud)
和
%w(a b c).send(&transform)
ArgumentError: wrong number of arguments (0 for 1)
Run Code Online (Sandbox Code Playgroud)
使用Ruby 1.9.3
%w(a b c).send(transform)
TypeError: #<Proc:0x007fa0721f0dc8@(irb):1 (lambda)> is not a symbol
Run Code Online (Sandbox Code Playgroud)
和
%w(a b c).send(&transform)
ArgumentError: no method name given
Run Code Online (Sandbox Code Playgroud) 在Ruby中,我可以有一个类似的模块:
module Greeter
def greet
print "Hello"
end
end
Run Code Online (Sandbox Code Playgroud)
我的班级可以得到这样的greet方法:
class MyClass
include Greeter
end
obj = MyClass.new
obj.greet
Run Code Online (Sandbox Code Playgroud)
现在,我想Greeter用Java实现我的模块.我正在使用JRuby.我不确定如何用Java创建一个Ruby模块(这样我可以include正常工作).
我曾经做过Java接口.将它包含在我的Ruby类中并不会抛出错误,但它实际上并不是一回事,因为模块似乎实现了这些方法,而Java接口却没有.
在我的Gemfile中,我指定了:
ruby '1.9.3', engine: 'jruby', engine_version: '1.7.9'
Run Code Online (Sandbox Code Playgroud)
但进入我的Rails项目目录会rvm引发此错误:
RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
you can ignore these warnings with 'rvm rvmrc warning ignore /home/petey/rails/kotoba/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.
ruby-1.9.3,engine:jruby,engine_version:1.7.9 is not installed.
To install do: 'rvm install ruby-1.9.3,engine:jruby,engine_version:1.7.9'
Run Code Online (Sandbox Code Playgroud)
但是,我确实安装了jruby 1.7.9:
$ rvm list
rvm rubies
jruby-1.7.9 [ x86_64 ]
ruby-1.9.3-p392 [ x86_64 ]
=* ruby-2.0.0-p247 [ x86_64 ] …Run Code Online (Sandbox Code Playgroud) 如果我想在Ruby 1.9或JRuby中构建DSL,我是否需要手动执行以下任何阶段:
显然,作为一名程序员,我不喜欢尽可能多地编写实际代码,所以我希望这些步骤都不需要手工操作:)
我有以下代码:
module DataMapper
module Resource
@@page_size = 25
attr_accessor :current_page
attr_accessor :next_page
attr_accessor :prev_page
def first_page?
@prev_page
end
def last_page?
@next_page
end
def self.paginate(page)
if(page && page.to_i > 0)
@current_page = page.to_i - 1
else
@current_page = 0
end
entites = self.all(:offset => @current_page * @@page_size, :limit => @@page_size + 1)
if @current_page > 0
@prev_page = @current_page
end
if entites.size == @@page_size + 1
entites.pop
@next_page = (@current_page || 1) + 2
end
entites
end
end
Run Code Online (Sandbox Code Playgroud)
结束
然后我打电话给#paginate:
@photos …Run Code Online (Sandbox Code Playgroud) 如何将像Xmx这样的jvm参数传递给jruby中的rake任务?我正在使用rvm并运行rake任务"rake db:migrate".
谢谢!
使用jruby-1.6.7通过rvm和gem版本1.8.24我创建了一个包含Gemfile的新项目:
source 'http://rubygems.org'
gem 'google-api-client'
Run Code Online (Sandbox Code Playgroud)
和一个main.rb:
require 'google/api_client'
Run Code Online (Sandbox Code Playgroud)
后
gem install bundler
bundle install
gem list
Run Code Online (Sandbox Code Playgroud)
我明白了
addressable (2.2.8)
autoparse (0.3.1)
bouncy-castle-java (1.5.0146.1)
bundler (1.1.4)
extlib (0.9.15)
faraday (0.8.1, 0.7.6)
ffi (1.0.11 java)
google-api-client (0.4.3)
jruby-launcher (1.0.14 java)
jruby-openssl (0.7.7)
json (1.7.3 java)
jwt (0.1.4)
launchy (2.1.0 java)
multi_json (1.3.6)
multipart-post (1.1.5)
rack (1.4.1)
rake (0.9.2.2)
rubygems-bundler (1.0.2)
rubygems-update (1.8.24, 1.7.2)
rvm (1.11.3.3)
signet (0.3.4)
spoon (0.0.1)
Run Code Online (Sandbox Code Playgroud)
但是当我运行ruby main.rb时,会导致错误:
LoadError: no such file to load -- google/api_client
require at org/jruby/RubyKernel.java:1033 …Run Code Online (Sandbox Code Playgroud) 我已经看过如何用Java编写原始JavaFX代码,如何用Java编写FXML代码,如何在JRuby中编写原始JavaFX代码,但似乎无法找到使用FXML与JRuby的任何内容.目前可以在JRuby中使用FXML吗?如果是这样,有没有很好的教程?
require 'sequel'
require 'jdbc/postgres'
DB = Sequel.connect("jdbc:postgresql://user:pass@domain/database")
DB.tables
Run Code Online (Sandbox Code Playgroud)
返回:
....(bla bla bla stack trace bla bla bla)....
Sequel::DatabaseConnectionError: Java::OrgPostgresqlUtil::PSQLException: The connection attempt failed.
...........
Run Code Online (Sandbox Code Playgroud)
我也试过了
jdbc:postgresql://domain/database?user=name&pass=word
Run Code Online (Sandbox Code Playgroud)
并且也有错误,但是另一个错误('密码请求但未提供')
红宝石1.9.3 - jruby 1.7.3
我看了看,试了很多代码样本,但是我无法让Sequel工作所以,在使用jruby时如何获得与postgres接口的续集?