2015-07-18 2 views
2

В настоящее время я пытаюсь реорганизовать некоторый дублирующий код. Существует один оператор, в частности, который дает мне больше всего хлопот:Альтернативные способы указания логического значения для метода

some_class = double("some_class", some_method?: true) 

Мне нужно заменить some_method с именем переменной. Однако нижеследующее не будет работать. Ниже приведен пример того, что я пытаюсь сделать.

some_method = unique_method 
some_class = double("some_class", some_method?: true) 

ли какое-либо знаете о альтернативном способе, чтобы написать:

some_method? # where some_method is a var. 

мне нужно, чтобы быть в состоянии назвать

some_class.some_method? 

для моего теста.

Любая помощь очень ценится. Заранее спасибо.

ответ

1

Surround, что со строкой, должно быть хорошо, в качестве альтернативы вы можете использовать синтаксис :some_method? => value.

def some_method? 
    puts "I am some_method? True" 
end 

some_hash_key = {:some_method? => true} 
send(:some_method?) 
my_variable = :some_method? 
send(my_variable)   
p some_hash_key 
+0

У вас есть пример того, как я это сделал бы, передав параметр? – user2152283

+0

Извините. Чтобы быть более явным, как я передал бы имя метода в качестве параметра функции или метода. def do_it (method_name) – user2152283

+0

Спасибо вам, мне нужно было разобраться, но вы заставили меня идти в правильном направлении. Я отмечаю это как ответ. Я разместил решение ниже. – user2152283

1

ОК .. так что в конце дня, выше работал .. здесь рабочий пример того, что я пытался сделать .. Я использую лямбда для моделирования функция

some_method_one = lambda { return } 
some_method_one = lambda { return } 

picked_method = some_method_one 
some_class = double("some_class", picked_one?: true) 
some_class.picked_one? # this returns true 

Этот код полностью упрощен. То, что я намереваюсь сделать (еще не закончил писать логику), заключается в создании shared_examples_for в rspec. У меня есть 4 метода, которые будут использовать ту же логику для тестирования, поэтому мне нужно передать метод как переменную. Надеюсь, это имеет смысл и помогает кому-то выйти. :-)

Смежные вопросы