给出一个课程:
class Shell
attr_reader :spiral
def initialize spiral
@spiral = spiral
end
def ?????
# do stuff...
end
end
some_shell = Shell.new([[1,2],[4,3])
some_shell.spiral #=> [[1,2],
# [4,3]]
some_shell.????? #=> [1,2,3,4]
命名?????
:
unwrap_spiral
或
unwrapped_spiral
似乎unwrap_spiral
对some_shell
说,"我希望你解开那个螺旋"并unwrapped_spiral
对some_shell
说,"我希望你给我一个未打开的螺旋"。
我读了POODR:
要求发送者想要什么的消息与告诉接收者如何表现的消息之间的区别可能看起来很微妙,但后果是显着的。
选择unwrapped_spiral
似乎更好。
这有意义吗?
答案 0 :(得分:3)
命名事物是经典的两个(三个)难事之一。 除了笑话,我的指导如下:
答案 1 :(得分:2)
Ruby似乎特别强调名称的意图及其含义。例如,unwrap_spiral
意味着它可以就地执行操作,除非有unwrap_spiral!
这样的公用方法明确表示它没有。
unwrapped_spiral
可能过于冗长。当spiral
可能就足够时,为什么unwrapped
会对此产生影响并不清楚。
要考虑的另一件事是组织在spiral
下以相同的字母顺序运作的方法:spiral_unwrap
或spiral_unwrapped
。
答案 2 :(得分:2)
答案 3 :(得分:1)
我的倾向是,而不是Array
有一个Spiral
螺旋,而不是Array
类(可能只是unwrap
的一个子类) Array#flatten
方法(在这种情况下只是class Spiral < Array
def unwrap
flatten
end
end
class Shell
attr_reader :spiral
def initialize(spiral)
# Or if your convention would allow, accept `spiral` as an Array
# and assign @spiral = Spiral.new(spiral)
@spiral = spiral
end
end
> shell = Shell.new Spiral.new([[1,2],[4,3]])
=> #<Shell:0x000000018286f0 @spiral=[[1, 2], [4, 3]]>
> shell.spiral
=> [[1, 2], [4, 3]]
> shell.spiral.unwrap
=> [1, 2, 4, 3]
的别名)。
Spiral
这是有道理的原因,因为在这种情况下您要操作的概念是Shell
,它属于$(window).resize();
,而不是shell本身。这使您可以使用其他方法对螺旋本身进行操作。随着Spiral的实现变得越来越复杂,Shell不一定会变得更复杂 - 它可以简单地在Spiral的公共接口上公开和操作。
答案 4 :(得分:1)
在您的示例中,Shell
仅适用于@spiral
,因此您可以:
Spiral
类Shell
继承自Spiral
Spiral#unwrap
(Array#flatten
不称为flattened
)Shell(Spiral)#unwrap
如果Shell
不仅仅是@spiral
,您可以:
Spiral
课程Spiral#unwrap
Shell#spiral#unwrap
:shell.spiral.unwrap