Aussi, si vous êtes intéressé à appeler le code Ruby de Objective-c, voici un extrait de la liste de diffusion MacRuby:
Une fois le moteur d'exécution MacRuby est initialisé, vous pouvez accéder à tous vos objets Objective-C de Rubis. Par exemple, si vous avez une classe Objective-C nommée Foo, vous pouvez le faire `Foo.new », etc.
Une autre possibilité est de passer vos objets Objective-C à une méthode Ruby en utilisant [NSObject performRubySelector:]
.
rubis:
class Foo
def test(o)
o.something
end
end
objc:
MyObject *o = [MyObject new]; // where o responds to -something
MacRuby *runtime = [MacRuby sharedRuntime];
id foo_obj = [runtime evaluateString:@"new Foo"];
[foo_obj performRubySelector:@selector(test:) withArguments: o, NULL];
Vérifiez la API entière ici: http://www.macruby.org/trac/browser/MacRuby/trunk/include/ruby/objc.h
Discussion: http://lists.macosforge.org/pipermail/macruby-devel/2010-April/004715.html
(Edit) Cela dit, peut-être le plus facile manière est d'ajouter un fichier d'en-tête pour votre fichier ruby, contenant votre metho ds équivalents.
Supposons que vous ayez cette classe rubis:
class Foo
def bar(moo)
"a string like #{moo}"
end
end
de sorte que le fichier d'en-tête équivalent sera quelque chose comme ça:
@interface Foo : NSObject
- (NSString *)bar:(NSString *)moo
@end
Maintenant, juste #import
l'en-tête et d'utiliser vos classes de rubis standard Obj-C provenant de votre code Obj-C:
NSString *aString;
Foo *myFoo;
aString = [myFoo bar:@"me"];
Cela peut sembler bizarre, mais ça fonctionne. Essentiellement, l'idée est de fermer la gueule du compilateur et de le laisser compiler votre code sans se plaindre des méthodes manquantes.Ensuite, au moment de l'exécution, cela fonctionnera (je suppose que grâce à la nature dynamique d'Obj-C lui-même). En passant, pour imiter le comportement sans caractère de ruby, id est votre ami en écrivant des signatures de méthodes dans le fichier d'en-tête.
Oui, j'ai essayé, mais je ne travaille pas du tout pour moi. Je me suis un peu rapproché en créant un paquet manuellement selon cet exemple (http://www.mail-archive.com/[email protected]/msg00940.html), mais c'est un processus très pénible et je ne l'ai pas tout à fait au travail. Je suppose que le code ObjectiveResource (destiné aux applications iPhone) n'est pas tout ce qui convient pour cela? – beno1604
Quelles erreurs obtenez-vous lorsque vous essayez le bundle? Pouvez-vous modifier votre message pour inclure les messages d'erreur? – sal