MacRuby 0.5包含一个基于LLVM构建的ruby编译器,名为macrubyc.
有谁知道是否有可能从编译的代码动态加载宝石?或者编译宝石并将它们链接起来?这是计划好的吗?或者编译代码如何能够一般地使用宝石.
你能告诉我 - 我可以使用哪个对象和哪种方法来获取有关使用目标c或macruby的OSX上已安装应用程序的信息?
对于Web应用程序,我使用Ruby on Rails.现在是时候看看我是否可以使用Ruby编写桌面应用程序.
所以我想知道我应该选择哪一个.
我看到它的方式是MacRuby + IronRuby vs JRuby.
前者让我可以同时使用Mac和Windows的桌面应用程序,而后者可以同时使用,但只能学习一种工具.
使用前者是否有强烈的论据而不是后者?
JRuby桌面应用程序是否与MacRuby + IronRuby桌面应用程序一样本机(或接近本机)?
每种解决方案的优缺点是什么?
我也非常新的桌面开发.分享您的想法和经验!
什么是处理由于传递无效的初始化参数而导致对象无法初始化的情况的ruby最佳实践?
我意识到在红宝石中,鸭子打字意味着我们不应该过分关注变量/参数类型,而是关注它们的行为方式.但是,我在MacRuby中工作,它通过Cocoa Objective-C API进行桥接,一些Cocoa方法需要类型参数.
例如,我有一个调用Objective-C API的ruby类,并且必须将它传递给NSURL类的对象.它看起来像这样:
class Alpha
attr_accessor :model
def initialize(hopefully_a_NSURL)
# bridged from Objective-C API
@model=NSManagedObjectModel.alloc.initWithContentsOfURL(hopefully_a_NSURL)
end # initialize
end
Run Code Online (Sandbox Code Playgroud)
......我会这样称呼它:
#bridged from Objective-C API
u=NSURL.fileURLWithPath(p)
a=Alpha.new(u)
puts "a=#{a.model}" # => a=#<NSManagedObjectModel:0x2004970e0
Run Code Online (Sandbox Code Playgroud)
>
......效果很好.
但是,如果我要滑倒:
a=Alpha.new("Whoops, a string not a NSURL" )
Run Code Online (Sandbox Code Playgroud)
......它因为来自Objective-C API深处的错误而乱七八糟地爆炸.
当然,我可以进行测试,以防止到达桥接对象的错误参数:
class Alpha
attr_accessor :model
def initialize(hopefully_a_NSURL)
if hopefully_a_NSURL.class==NSURL
@model=NSManagedObjectModel.alloc.initWithContentsOfURL(hopefully_a_NSURL)
end
end # initialize
end
u=NSURL.fileURLWithPath(p)
a=Alpha.new("")
puts "a=#{a}" # => a=#<Alpha:0x200399160>
Run Code Online (Sandbox Code Playgroud)
...但我仍然得到了一个实时实例.我甚至尝试从初始化返回nil,但似乎ruby坚持总是返回一个实例.
我读到的所有内容都表明类型检查在ruby中非常不受欢迎,但在MacRuby的情况下我可能不得不例外.这可以很好地利用ruby中的异常,还是有更优雅的解决方案?我是红宝石的菜鸟,所以假设我从错误的角度来看待这个问题.
我正在尝试编写一个小的MacRuby状态栏应用程序,它从命令行运行命令并显示输出.我不知道该怎么做.如何从我的Mac应用程序执行此操作?
更新:它可能需要做的另一件事是要求输入管理员密码.有时,当我从命令行运行此脚本时,它会询问我的密码.我不知道如何提示用户输入密码(或嵌入shell以便他们直接输入密码).
Xcode最强大的功能之一就是它的Intellisense完成功能,它会在您输入Foundation/Cocoa/UIKit API的名称时显示潜在候选项列表.我对MacRuby,PyObjC或更新的RubyMotion非常感兴趣,但是如果没有代码完成,这些工具似乎比它们的价值更麻烦.
上述三种技术中的任何一种,对于任何文本编辑器(但最好是Vim或Xcode),是否有任何代码完成功能(不一定是Intellisense )?IDE解决方案的奖励点,允许在单个命令中构建和运行应用程序(如Xcode的"运行"按钮).
据我所知,Xcode 4放弃了对MacRuby/PyObjC的支持,因此Intellisense不再可用.为了完成代码,我应该在Xcode 4旁边安装Xcode 3吗?其他人如何做到这一点(当然你们使用某种形式的代码完成 - 我不相信任何人都能记住Foundation/Cocoa/UIKit中的所有类)?
什么是OS X相当于ios'(Ruby风格):
@window.rootViewController = NSViewController.alloc.initWithNibName(nil, bundle: nil)
Run Code Online (Sandbox Code Playgroud)
有两个方面:
我正在尝试用代码构建一个窗口(没有nib)......并按照Pragmatic的RubyMotion程序员指南(为iOS编写).
那么,我如何让Textmate使用1.9.6的分支MacRuby,而不是OSX中的默认Ruby,1.8.7?
我正在使用MacRuby 0.10和XCode 4,我在其中创建了一个默认的基于NSDocument的应用程序.但是,在构建和运行应用程序时,不会显示任何窗口,并且通常会禁用通常的菜单命令.
在创建常规的基于Cocoa的应用程序时,主应用程序窗口显示正常.
有谁知道修复是什么?
担;
在rspec和类似的测试框架中,如何测试缺少方法?
我刚刚开始摆弄rspec和培根(rspec的简化版本.)我想定义测试,确认一个类只允许对实例变量的读访问.所以我想要一个看起来像这样的课程:
class Alpha
attr_reader :readOnly
#... some methods
end
Run Code Online (Sandbox Code Playgroud)
我很难过:
it "will provide read-only access to the readOnly variable" do
# now what???
end
Run Code Online (Sandbox Code Playgroud)
我没有看到各种类型的提供的测试如何测试缺少访问器方法.我是红宝石和红宝石测试中的菜鸟,所以我可能会错过一些简单的东西.
我想深入研究为Mac开发应用程序,以及后来为iPhone开发应用程序.对我来说,作为一名Rubyist,很明显我同时学习了MacRuby和Objective-C.问题只是我应该按照哪种顺序进行.是先更容易学习Objective-C然后结合两个世界的知识并开始学习MacRuby,还是更容易从MacRuby开始慢慢找到开发Mac应用程序的方法?
我对Ruby语言的理解非常好 - 有5年的经验,而且我对C有一个很好的理解.以防万一这样可以更容易回答我的问题.
macruby ×11
ruby ×4
macos ×3
objective-c ×3
rubymotion ×2
cocoa ×1
cocoa-touch ×1
command-line ×1
ironruby ×1
jruby ×1
llvm ×1
macrubyc ×1
pyobjc ×1
rspec ×1
rubygems ×1
shell ×1
textmate ×1
unit-testing ×1
xcode ×1
xcode4 ×1