このRubyの問題を解いてみました。ネタバレが含まれるので自分で解きたい人は今すぐ戻るように!
== true/false から思いついた Ruby の問題。
— Yusuke Endoh (@mametter) 2018年2月22日
def f(x)
if x
unless x
p :foo # ←ここに実行到達することは可能か?
end
end
end
やりかた
if xやunless xが実行されるまでの間にローカル変数xの値を書き換える
ruby_is_awesome.rb
def f(x)
if x
unless x
p :foo
end
end
end
TracePoint.trace(:line) do |tp|
if tp.lineno == 2
tp.binding.local_variable_set(:x, true)
end
if tp.lineno == 3
tp.binding.local_variable_set(:x, false)
end
end
f("whatever")
# foo
f(nil)
# foo
f(false)
# foo