2013-08-19 4 views
0

Я играл с MacRuby и замечаю, как он расширяет Ruby, чтобы иметь возможность обрабатывать метод Smalltalk (или message) подписи Objective-C. На первый взгляд, я подумал, что он очень похож на новые аргументы Keyword Ruby 2.0, но дальнейшая проверка показывает, что они работают по-разному.Различия между аргументами ключевого слова в сигнатурах Ruby 2.0 и Interleaved в Objective-C

Моя первая подсказка была при чтении MacRuby method spec on GitHub.

it "can have multiple arguments with the same name" do 
    def @o.doSomething(x, withObject:y, withObject:z); x + y + z; end 

    @o.should have_method(:'doSomething:withObject:withObject:') 
    @o.should_not have_method(:'doSomething') 
end 

Насколько я знаю, что поведение не допускается в Рубине 2.0, потому что withObject: часть будет использоваться в качестве единственного идентификатора параметра, и, следовательно, не может быть два с тем же именем.

Является ли это непреодолимой проблемой? Из-за этого MacRuby будет вынужден остаться с Ruby 1.9?

ответ

1

Ключевое различие между аргументами ключевого слова и чередованными аргументами точно так же, как вы догадались; ключевые слова не являются частью имени метода (селектор в Objective-C).

В частности, вы не можете переупорядочивать или удалять части селектора метода Objective-C, потому что это будет именовать другой метод.

Это также почему мы обидчицы щенки Obj-C серого цвета, когда кто-то описывает методы Objective-C как имеющие ключевые слова, предшествующие каждому аргументу.

У вас могут найти ответы на вопросы particular question. Брэд Кокс, один из авторов Objective-C, ответил.