«В Ruby есть несколько способов сделать то же самое» - что это значит? - PullRequest
3 голосов
/ 19 июня 2011

Не стесняйтесь удалять эту тему, если она обсуждается или совершенно очевидна. Я родом из C # фона и планирую изучать Ruby. Все, что я читал об этом, кажется довольно интригующим. Но меня смущает базовая философия Ruby, заключающаяся в том, что «существует несколько способов сделать что-то одно». Может ли кто-нибудь предоставить 2 или 3 простых арифметических или строковых примера, чтобы прояснить этот вопрос, например, о синтаксисах или логике и т. Д.

Спасибо

Ответы [ 3 ]

7 голосов
/ 19 июня 2011

«Более чем один способ сделать что-то» означает иметь возможность делать что-то так, как вы этого хотите. Таким образом, вы можете использовать различные стили программирования, независимо от происхождения.


Итерация с использованием for против блоков

Вы можете перебирать множество таких вещей. Это довольно просто, и если вы из Java, это кажется естественным.

for something in an_array
   print something
end

Более Ruby-подобный способ будет следующим:

an_array.each do |something|
    print something
end

Первый - довольно известный способ ведения дел. Второй использует blocks , очень мощную концепцию, которую вы найдете во многих идиомах Ruby. По сути, массив знает, как перебирать его содержимое, поэтому вы можете изменить это и добавить что-то вроде:

an_array.each_with_index do |something, index|
    print "At #{index}, there is #{something}"
end

Вы могли бы сделать это и так, но теперь вы видите, что вышеприведенное выглядит проще:

index = 0
for something in an_array
    print "At #{index}, there is #{something}"
    index += 1
end

Передача аргументов как обычно или использование Hash es

Обычно вы бы передавали аргументы так:

def foo(arg1, arg2, arg3)
    print "I have three arguments, which are #{arg1}, #{arg2} and #{arg3}"
end

foo("very", "easy", "classic")

=> "I have three arguments, which are very easy and classic"

Тем не менее, вы также можете использовать Hash для этого:

def foo(args)
    print "I have multiple arguments, they are #{args[:arg1]}, #{args[:arg2]} and #{args[:arg3]}"
end

foo :arg1 => "in a", :arg2 => "hash", :arg3 => "cool"

=> "I have three arguments, which are in a hash and cool"

Вторая форма часто используется Ruby on Rails. Приятно, что теперь у вас есть названные параметры. Когда вы передаете их, вам будет легче запомнить, для чего они используются.

2 голосов
/ 26 июля 2017

Это означает много путаницы , войн в стиле и ошибок из-за тонких различий , все во имя свободы выбора.

1 голос
/ 02 декабря 2015

Несколько тривиальным примером является использование alias / alias_method (также обратите внимание, что есть два одинаковых способа для почти одной и той же вещи, например, alias и alias_method).

Учтите, что вы работаете в проекте иВы забыли, какой API использовать.

Какое имя метода было снова?

Что ж, вы можете просто оставаться в рамках логики домена вашей программы и продолжать работать с нимтак, как вы хотите;тогда вы просто добавите псевдоним в основную точку входа вашей другой программы.

Люди могут использовать по умолчанию .collect или они могут использовать .map, это не имеет большого значения, что вы лично использовали бы (яиспользуйте .map, так как он короче).

Использование псевдонимов помогло мне, потому что через несколько месяцев я часто не могу вспомнить, как что-то использовать.Да, я мог бы это найти, но зачем мне все равно?Я могу просто использовать псевдоним вместо этого.(Обратите внимание, что я стараюсь оставаться как можно более простым с псевдонимами и API.)

...